1

在以下情况下该怎么做:
1. 应用程序使用了复杂的活动和片段结构
2. 我返回到同时已(部分或未)销毁的后台应用程序
3. 它使我返回到最后一个屏幕,该屏幕很深在工作流程中
4. 我需要它返回到第一个屏幕以重新初始化事物(因为它很复杂并且需要用户交互)

只是为了清楚:
我问的是如何处理现有的活动堆栈和片段遇到这种情况
- 采取的行动:启动 Intent?刚结束?对持有的子结构做些什么然后完成?
- 何时执行 - 立即在 Activity.onCreate片段的空构造函数?或者活动是否足够?
- 如何最好地检测它:到目前为止,我想出的只是:绑定到一个包含必要数据/连接的服务,然后询问它是否已被初始化。但是绑定在 onResume 之后完成。

我不是在问任何与 UI 相关的事情。
我不是要一个只适用于一个特定应用程序的解决方案,所以不要要求代码。
如果您认为这个问题含糊不清,这里有一个单句版本:“如何解除堆栈并返回到第一个屏幕?

有关详细信息(至少与相关),请参阅https://stackoverflow .com/questions/14650342

4

3 回答 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;

会发生两件事:

  1. startActivity 将启动新活动
  2. 完成将关闭当前活动,但它将带回上一个活动(从被杀死的 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 回答