以下时间做什么:
1.该应用程序使用活动和碎片的复杂结构
2.我返回到同时(部分或未部分)销毁的后台应用程序
它将我返回到最后一个屏幕,该屏幕位于工作流程的深处
4.我需要它返回到第一个屏幕来重新初始化事物(因为它很复杂,需要用户互动)
只是要明确:
我问遇到这种情况时如何处理活动和碎片的现有堆栈。
- 采取行动:发起意图?刚完成?做一些事情来保持子结构然后完成?
- 何时执行它 - 立即在Activity.onCreate 和 Fragment的空构造函数中?或活动是否足够?
- 如何最好地检测它:到目前为止我所提出的是:绑定到一个包含必要数据/连接的服务,然后询问它是否已被初始化。但是装订完成了AFTER onResume
我不是在询问与UI有关的任何内容
我不是要求一个只适用于某个特定应用程序的解决方案,所以不要求代码
如果你看到这个问题含糊不清,这里只有一句话:“如何解散堆栈并返回第一个屏幕?”
有关详细信息(至少,相关内容),请参阅https://stackoverflow.com/questions/14650342。
答案 0 :(得分:2)
如果您认识到您的应用程序处于不一致状态并且您需要重新开始,最简单的方法是重新启动您的根活动,如下所示:
Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
这将清除任务中的所有活动并重新启动根活动。
我建议在onCreate()
活动中这样做。
答案 1 :(得分:2)
当app在后台并且os想要释放一些内存。整个PID被杀死,这会杀死所有活动。文档误导了这种行为。看这篇文章
Android app out of memory issues - tried everything and still at a loss
hackbod(Android平台开发者)在那里证实了这一点。
当您有多个活动A,B,C以及当您的应用程序被杀并且您想要将其恢复时。 将调用大多数顶级活动的onCreate(非null)。值得注意的是,当这种情况发生时你做了类似
的事情onCreate(not null){
startActivity(new intent)
finish;
将会发生两件事:
这可能会导致多个活动实例出现问题。
前段时间我遇到了类似的问题,结果却是丑陋的黑客,但它确实有效:
重新启动整个应用,我添加了类似
的内容onCreate(not null){
if(launcher activity == null){
finish();
return;
在所有活动中。 根据您想要实现的目标,使用其他人建议的标志。 希望能给你一些提示。
答案 2 :(得分:1)
如果您的目标是解雇所有活动并返回您的家庭/主要活动,那么您只需使用:
Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这将清除主页上的所有活动并返回主屏幕。