如何处理android多个实例?

时间:2014-11-27 08:59:07

标签: android multiple-instances

launchMode是“singleTop”:

<activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".GridActivity"></activity>

MainActivity是启动画面,完成后(通过服务器验证)它将调用GridActivity。

问题非常具体:

从Google Play安装应用时,图标将显示在两个位置: 应用抽屉&amp; “桌面”(启动器屏幕 - 默认启动器)。

重现问题的步骤:

  1. 从应用程序抽屉中打开应用程序并等待显示GridActivity
  2. 按“主页”按钮将应用程序发送到后台
  3. 从“桌面”(设备的默认启动器)
  4. 打开应用程序
  5. 应用程序将以新实例开始
  6. 我希望应用程序直接转到GridActivity,因为“singleTop”launchMethod。

    BTW,如果在步骤3中我再次从Application Drawer打开应用程序,它可以正常工作,直接进入GridActivity。

    我错过了什么?

1 个答案:

答案 0 :(得分:0)

因为您;将您的启动活动重新用作&#34;启动画面&#34;它可能会被破坏,从而导致这种行为。一旦它被销毁,那么另一个调用它的进程将在一个新进程中启动它。阅读本文了解更多信息:

Android "single top" launch mode and onNewIntent method

&#34; singleTop&#34;可能没有必要启动模式。虽然为了解决这个问题,我会先使用&#34;第一次通过&#34;从主活动启动启动画面的标志。它似乎工作得很好。

编辑:

你应该小心阅读&#34; launchMode&#34; - singleTop和&#34;标准&#34;模式有这种行为,来自docs:

  

使用&#34;标准&#34;的活动或&#34; singleTop&#34;启动模式可以   实例化多次。

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

您可能正在体验singleTop的这一方面:

  

例如,如果&#34; singleTop&#34;的现有实例活动在   目标任务,但不是在堆栈的顶部,或者它是否在   堆栈的顶部,但不在目标任务中 - 一个新的实例   创建并推送到堆栈。

两个发射位置产生两个不同的目标任务。这可能是因为两个屏幕如何创建意图或因为&#34; splashscreen&#34;被破坏,因此不存在(它不是&#34;只有&#34;通过击退而被破坏 - Android有几种算法可以破坏活动以节省处理和内存。你通常应该假设如果活动不可见,它可以随时被销毁和重建。)