我在清单中有一个活动,如下所示:
<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的链接。在我处理其中一个意图后,我退出了我的主要活动。
如果我使用任务管理器返回我的应用程序,它将使用相同的意图,使用我已处理的相同数据。有没有办法我可以基本上清除或替换这个意图,以便它不被任务管理器重用?如果我正常启动,通过单击应用程序而不是使用任务管理器,它不会重复使用数据。
由于
答案 0 :(得分:1)
当您重新输入已使用&#34; singleTask&#34;设置的应用时启动模式,它不会创建活动的新实例(如果它已经存在),而是重新使用旧活动并将其带到堆栈顶部。您必须覆盖活动的onNewIntent()方法以处理您可能需要的任何操作。当你将一个活动带到堆栈的前面时,这个onNewIntent()被调用,你将需要重置该函数中的数据。
有关任务和后台堆栈的更多信息here。
答案 1 :(得分:1)
我的问题是从主页按钮启动活动时,这似乎是一个有效的解决方案:
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
//handle intent
};
如果从任务管理器启动,该标志为true,在这种情况下,我可以忽略意图数据。这可能不适用于其他一些情况。