防止任务管理器在任务重建最后显示的活动(prevent task manager from recr

2019-09-22 19:47发布

该方案是:

启动应用程序,启动活动A,定位到B,然后到C按Home键。 Ç被破坏。 调出任务管理器,按我的应用程序的图标。 活性C被被重新创建。 我怎样才能让这种行为停止? 我想会回去的活动A.

我能得到这个最接近的是通过开展活动B,C与Intent.FLAG_ACTIVITY_NO_HISTORY。 但有了这个标志的问题是,它可以防止活动B,C从以往任何时候都在整个应用程序的生命重新创建(它们应该是可创建一次任务管理器导致用户A)。

编辑:相同的行为观察中,如果我使用这种方法,而不是Intent.FLAG_ACTIVITY_NO_HISTORY情况:

class C extends Activity
{
...
    @Override
    protected void onDestroy() 
    {
        // last resort
        finish();
        super.onDestroy();      
                //finish();
    }
}

一旦它的onDestroy()被调用一次,我不能导航回到活动Ç:(

谢谢

Answer 1:

人机大战的一个周末之后,这是我所经历过:

所述noHistory =“真”的活动属性从与站在他们下面在活动堆栈另一个活动被启动(startActivity())防止它们。 的事情是,整个活动导航逻辑通过增加此标志的意图的方法通过:

context.startActivity(intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));

安卓不能“重新排序到前面”一“noHistory”活动,我把它作为一个bug。 由于noHistory活动已经结束了()“版,它应该召集的一个新实例......什么工作是使用FLAG_ACTIVITY_CLEAR_TOP上的活动A(见OP)。 这样一来,B和C得到了在所有情况下正确实例。 然而,这还不够,我最终完成()'荷兰国际集团的所有活动我离开他们,因为在另一方面是OOM错误,以及生命周期/应用逻辑的并发症。



Answer 2:

编辑您的Manifest.xml文件和你不希望得到这种重建活动的指定:

android:launchMode="singleTask"

或者根据您的需要使用其他属性。 走在这里进行详细的解释。



文章来源: prevent task manager from recreating last displayed activity in a task