【问题标题】:Running two activities on two different processes在两个不同的进程上运行两个活动
【发布时间】:2011-12-10 00:09:02
【问题描述】:

我正在尝试在 2 个不同的进程上运行 2 个活动。这样做的目的是我的应用程序正在显示我的产品,它添加了我的子产品的主屏幕图标。每当我使用主产品时,我希望它显示在主进程中,而我的子产品显示在另一个进程的不同活动中。这样在退出子产品时,恢复我的主产品可以很快,因为它已经在后台运行。

通读: http://developer.android.com/guide/topics/manifest/activity-element.html#proc

他们声明您可以使用 android:process 属性将活动分成不同的进程。这是我所做的:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" android:process="com.mypackage.myapp">
    <activity android:name=".ProductActivity"
              android:label="@string/app_name" 
              android:configChanges="orientation|keyboardHidden">
        <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
             <category android:name="android.intent.category.DEFAULT"/>
             <category android:name="android.intent.category.BROWSABLE"/>
         </intent-filter>
    </activity>
    <activity android:name=".SubProductActivity"
              android:label="@string/app_name" 
              android:configChanges="orientation|keyboardHidden"
              android:process=":com.mypackage.myapp.newprocname">
        <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
             <category android:name="android.intent.category.DEFAULT"/>
             <category android:name="android.intent.category.BROWSABLE"/>
         </intent-filter>
    </activity>
    <activity android:name="com.phonegap.DroidGap" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden"> <intent-filter> </intent-filter> </activity>
</application>

然而,记录当前的 PID,这两个活动实际上都在同一个进程上运行......

可能是什么问题?

【问题讨论】:

    标签: java android process cordova


    【解决方案1】:

    在将子活动的意图设置为 android.intent.category.LAUNCHER(如您正确所做的那样)后,为第二个活动设置单独的 TaskAffinity 字符串。 例如。在清单的第二个活动行中,确保您有类似于

    <activity android:name=".SubProductActivity" android:label="SubActivity"
    android:taskAffinity="com.domain.project.SubActivityName">
    

    这告诉 Android 在单独的进程中运行 SubProductActivity。

    另请参阅https://stackoverflow.com/a/3270422/978329

    【讨论】:

    • 我只是在问如何将其标记为答案?我的意思是 taskAffinity 与应用程序任务(持有活动的任务,或简单的后台堆栈)更相关。将此设置为 true 应该只让您的组件在单独的任务上运行,而不是在单独的进程上运行。甚至我也看不到该活动的任何 launchMode 属性设置为 singleTask。
    【解决方案2】:

    我正在尝试在 2 个不同的进程上运行 2 个活动。

    为什么?

    这样做的目的是让我的应用显示我的产品,该产品会添加我的子产品的主屏幕图标。

    这似乎与让它们处于单独的进程中没有任何关系。

    这样在退出子产品时,恢复我的主产品可以很快,因为它已经在后台运行。

    如果它们只在一个进程中,它会更快,更不用说显着提高内存效率。无论如何,您的其他活动都会在内存中 - 将它们放在某个单独的进程中不会改变这一点。

    可能是什么问题?

    您的日志记录可能存在缺陷。更简单的进程名称(例如,:remote)可能会起作用。

    但是,最简单的答案是删除android:process 属性。

    【讨论】:

      【解决方案3】:

      我不知道我是否以正确的方式理解了你的问题,但是......

      如果您从 MainProductActivity 启动子产品活动,android 会在内存中维护 MainProductActivity,如果您退出 SubProductActivity(例如通过后退按钮),它应该与 android 可以在活动之间切换一样快......不是吗喜欢你想要的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 2022-11-26
        • 2020-10-13
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多