在两个不同的进程上运行两个活动

时间:2011-12-10 00:09:03

标签: java android process cordova

我正在尝试在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,两个活动实际上都在同一个进程上运行......

可能是什么问题?

3 个答案:

答案 0 :(得分:3)

将子活动的意图设置为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

答案 1 :(得分:2)

  

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

为什么?

  

这样做的目的是我的应用程序正在显示我的产品,其中添加了我的子产品的主屏幕图标。

这似乎与让他们处于不同的流程中无关。

  

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

它会更快,更不用说显着更高的内存效率,因为它们只需要一个进程。无论如何,你的其他活动都将在记忆中 - 将它们放在一个单独的过程中不会改变它。

  

可能是什么问题?

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

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

答案 2 :(得分:1)

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

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