阻止系统以先前的意图启动单个顶级活动

时间:2012-02-07 14:31:08

标签: android android-activity android-intent

我在清单中有一个活动,如下所示:

<activity android:name=".activity.Main" android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="http" android:host="asdf.com"/>
        </intent-filter>
</activity>

拦截和处理http://asdf.com的链接。在我处理其中一个意图后,我退出了我的主要活动。

如果我使用任务管理器返回我的应用程序,它将使用相同的意图,使用我已处理的相同数据。有没有办法我可以基本上清除或替换这个意图,以便它不被任务管理器重用?如果我正常启动,通过单击应用程序而不是使用任务管理器,它不会重复使用数据。

由于

2 个答案:

答案 0 :(得分:1)

当您重新输入已使用&#34; singleTask&#34;设置的应用时启动模式,它不会创建活动的新实例(如果它已经存在),而是重新使用旧活动并将其带到堆栈顶部。您必须覆盖活动的onNewIntent()方法以处理您可能需要的任何操作。当你将一个活动带到堆栈的前面时,这个onNewIntent()被调用,你将需要重置该函数中的数据。

有关任务和后台堆栈的更多信息here

答案 1 :(得分:1)

我的问题是从主页按钮启动活动时,这似乎是一个有效的解决方案:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { 
    //handle intent 
};

如果从任务管理器启动,该标志为true,在这种情况下,我可以忽略意图数据。这可能不适用于其他一些情况。