我的应用程序,在后台运行,在某些时候显示活动,故意中断用户的流程。我的活动启动了一项新任务,在“近期任务”列表中显示在前台。有什么方法可以预防吗?设置android:excludeFromRecents
不起作用 - 仅在暂停后,“近期任务”中不再显示活动。
Manifest看起来像:
<activity
android:name="com.example.recenttasks.MainActivity"
android:excludeFromRecents="true">
</activity>
并以这种方式开始活动:
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
答案 0 :(得分:9)
你提到的关键是
在前台
中出现在“近期任务”列表中
我认为你无法改变这种行为。我刚刚测试了我的应用程序,同样的事情发生了。如果我在前台进行活动时按下“最近任务”按钮,则会显示在那里。当我离开它到另一个活动或我的手机的主屏幕时,活动不再列出。
我还在最新Android版本附带的内置DeskClock应用程序中对此进行了测试,并且在触发新警报时会出现相同的行为。请注意,该应用的AlarmAlertFullscreen
活动与您在问题中提到的参数相同。
我不确定你是否可以绕过这个或者为什么你需要在第一时间,因为一旦失去焦点,活动就不再列出了。
答案 1 :(得分:2)
你在清单中定义它已足够但它不会来......
ok ..try也将此标志添加到Intnet
并启动活动..
intnet.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
答案 2 :(得分:1)
用户应该能够返回吗? (意思是如果它显示并且用户点击了最近,他们是否有机会看到隐藏的活动,或者它是否仍然存在?)
无论如何 如果他们无法返回,那么最好的行动就是finish()
活动onPause()
。这意味着只要您使用了android:excludeFromRecents
和android:noHistory="true"
,就会有最近的项目。
如果您确实希望将返回到“中断”活动(但不想要重新录入),您可以考虑仍然完成活动onPause
- 同时还要录制{ {1}}标志(类似preference
)。然后,您的其他活动可以在IS_INTERSTITIAL
中检查此偏好设置,如果是onResume
,则发送true
以重新启动插页式广告 - 对用户而言只是看起来他们正在以与离开时相同的状态恢复应用程序(插页式广告)
编辑:如果屏幕需要保留(而不是重新实例化),则可以使用DialogFragment,但您必须担心配置更改。有一个你可以尝试的黑客(在this answer中解释) -
将您的标签设为空使用Intent
排除您最近的任务。然而,这是一个明确的黑客,可能会产生不一致的结果(因为我没有测试它确定)