在以下情况下该怎么做:
1. 应用程序使用了复杂的活动和片段结构
2. 我返回到同时已(部分或未)销毁的后台应用程序
3. 它使我返回到最后一个屏幕,该屏幕很深在工作流程中
4. 我需要它返回到第一个屏幕以重新初始化事物(因为它很复杂并且需要用户交互)
只是为了清楚:
我问的是如何处理现有的活动堆栈和片段遇到这种情况。
- 采取的行动:启动 Intent?刚结束?对持有的子结构做些什么然后完成?
- 何时执行 - 立即在 Activity.onCreate和片段的空构造函数?或者活动是否足够?
- 如何最好地检测它:到目前为止,我想出的只是:绑定到一个包含必要数据/连接的服务,然后询问它是否已被初始化。但是绑定在 onResume 之后完成。
我不是在问任何与 UI 相关的事情。
我不是要一个只适用于一个特定应用程序的解决方案,所以不要要求代码。
如果您认为这个问题含糊不清,这里有一个单句版本:“如何解除堆栈并返回到第一个屏幕? ”
有关详细信息(至少与相关),请参阅https://stackoverflow .com/questions/14650342。
问问题
579 次
3 回答
2
如果您发现您的应用程序处于不一致的状态并且您需要重新开始,最简单的方法是重新启动您的根活动,如下所示:
Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
这将从任务中清除所有活动并重新启动根活动。
我建议在onCreate()
活动中这样做。
于 2013-02-04T09:33:21.127 回答
2
当应用程序在后台并且操作系统想要释放一些内存时。整个 PID 被杀死,这会杀死所有活动。文档对这种行为具有误导性。看到这个帖子
Android 应用程序内存不足问题 - 尝试了所有方法,但仍然一头雾水
hackbod(Android 平台开发人员)在哪里证实了这一点。
当您有多项活动 A、B、C 以及当您的应用程序被杀死并且您想将其恢复时。大多数顶级活动的 onCreate(not null) 将被调用。值得注意的是,当这种情况发生时,您会执行类似的操作
onCreate(not null){
startActivity(new intent)
finish;
会发生两件事:
- startActivity 将启动新活动
- 完成将关闭当前活动,但它将带回上一个活动(从被杀死的 pid)及其 onCreate(not null),这只是活动堆栈中的下一个活动。
这可能会导致多个活动实例问题。
前段时间我遇到了类似的问题,最终以丑陋的黑客方式结束,但它奏效了:
要重新启动整个应用程序,我添加了类似的内容
onCreate(not null){
if(launcher activity == null){
finish();
return;
在所有活动中。根据其他人的建议,取决于您想要实现的使用标志。希望能给你一些提示。
于 2013-03-23T20:18:02.273 回答
1
如果您的目标是关闭所有活动并回到您的家庭/主要活动,那么您可以简单地使用:
Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这将清除主页上的所有活动并返回主屏幕。
于 2013-02-04T09:32:56.960 回答