通过Scheme URL启动时,我的Android Activity的多个实例

时间:2015-02-07 14:41:15

标签: android

当我通过网址启动我的应用时,我看到了我的启动器活动的第二个实例。我尝试使用singleInstance作为launchMode,它确实阻止了另一个实例的创建,但它也有一些令人讨厌的副作用。

一个副作用是:

  1. 通过图标
  2. 启动我的应用
  3. 从主菜单中打开另一个活动。
  4. 点击主页按钮。
  5. 通过图标
  6. 再次启动我的应用
  7. 再次显示主菜单,而不是我之前查看的活动。
  8. 我知道这种预期的行为,因为我查看了Android文档中的launchmodes。

    我的问题是,有没有其他方法可以在不使用singleInstance启动模式的情况下阻止我的活动的单个实例?

    如果我必须使用singleInstance,那么在重新启动应用程序时如何保留活动后台堆栈?

    以下是我的清单的一部分,显示没有

    的主菜单活动
    <activity android:name="com.me.myapp.MainMenuActivity" android:label="@string/app_name" >
    <intent-filter>
    <category android:name="android.intent.category.LAUNCHER" />
    <data
    android:host="mydomain.com" android:scheme="http" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
    </activity>
    

    我尝试将isTaskRoot添加到MainMenuActivity但是当我能清楚地看到另一个正在运行的活动实例时,它总是返回true。

    经过一番游戏后,我注意到了:

    1. 如果我使用单一方法启动我的应用程序,我就不会看到第二个实例。单击URL或使用启动器图标。
    2. 我只会在使用/混合两种方法启动应用程序时看到第二个实例。
    3. 这表明通过URL和图标点击的启动方法是不同的。当我的活动实例已经运行并且启动了一个新实例时,将调用onCreate。这会创建一个新活动 - 我想改为调用onNewIntent。

1 个答案:

答案 0 :(得分:1)

我尝试使用singleTask,但我仍然看到了我的应用的两个实例。

然后我偶然发现了一篇博文Android singleTask LaunchMode。它表示singleTask活动不能有<intent-filter>

所以我实现了一个启动器活动,现在我的应用程序运行正常。