繁体   English   中英

阻止任务管理器重新创建任务中最后显示的活动

[英]prevent task manager from recreating last displayed activity in a task

场景是:

启动应用程序,启动活动A,导航到B,然后转到C按主页按钮。 C被摧毁了。 打开任务管理器,按我的应用程序图标。 正在重新创建活动C. 我怎样才能停止这种行为? 我希望回到活动A.

我最接近的是通过使用Intent.FLAG_ACTIVITY_NO_HISTORY启动活动B,C。 但是这个标志的问题在于它阻止了活动B,C在应用程序的整个生命周期中被重新创建(一旦任务管理器将用户引导到A,它们就应该是可创建的)。

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

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

一旦它的onDestroy()被调用一次,我无法导航回活动C :(

谢谢

经过一个人与机器周末之后,这就是我所经历的:

noHistory =“true”活动属性阻止它们从活动堆栈中位于它们下面的另一个活动启动(startActivity())。 事情就是整个活动导航逻辑通过一个方法传递这个标志到意图:

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

Android无法“重新排序到前面”一个'noHistory'活动,我把它当作一个bug。 由于noHistory活动已经完成(),它应该召唤一个新的实例......有效的是在活动A上使用FLAG_ACTIVITY_CLEAR_TOP(参见OP)。 这样,B和C在所有场景中都得到了适当的实例化。 但是,这还不够,我最终完成了所有活动,因为一方面是因为OOM错误而另外一方面是生命周期/应用程序逻辑并发症。

编辑Manifest.xml文件并在活动中指定您不希望重新创建此文件:

android:launchMode="singleTask"

或根据您的要求使用其他属性。 到这里进行详细解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM