android - 重新启动已经运行的 Activity

标签 android android-activity android-lifecycle

问题来了。我有一个应用程序,我想在其中按下一个按钮,启动一个显示项目列表的新 Activity ,允许用户选择任意数量的项目,单击提交并将该数据发送到调用新 Activity 的原始 Activity 元素 list 。这是基本结构:

Activity A -> Activity B (select items, press submit) -> [already running] Activity A (receive sent items)

我来回发送数据没问题。我确实遇到的问题是,当我尝试重新启动 Activity A 时,它会通过 Activity 的 onCreate() 方法。我不想这样做,因为我希望能够预先在 onCreate() 方法中设置所有内容,然后通过 onRestart() 补充已经存在的内容方法。我不确定为什么每次重新启动 Activity 时都会调用 onCreate() 方法。我的猜测是我在 Activity B 中调用 Activity 的方式:

Intent intent = new Intent(this, PatientChartActivity.class);
intent.putExtra("checked", checked);
intent.putStringArrayListExtra("checked", checked);
startActivity(intent);

我一直在查看 Android Activity 生命周期,我不确定为什么它不会自动返回到之前的 Activity ,除非我确实必须强制它这样做。我可以肯定的一件事是正在运行的 Activity 没有被破坏。我在 onDestroy() 方法中放入了 Log.v(TAG, "DESTROY") 日志消息,确保它不会破坏 Activity 。我在启动 Activity 时尝试使用不同的标志来告诉系统我想恢复以前启动的 Activity ,但这些似乎也不起作用。我可能会误解他们。我已经就该主题进行了广泛的研究,但我发现的解决方案都没有帮助。 Here是我发现的一个问题,似乎与我的相同 但似乎没有解决我正在寻找的问题。我还查看了以下链接以了解解决该问题的其他可能途径,但没有奏效。

http://www.droidnova.com/use-intents-to-start-other-activities,76.html

http://www.warriorpoint.com/blog/2009/05/24/android-how-to-switch-between-activities/

最佳答案

根据你陈述的事情(“Activity A -> Activity B(选择项目,按提交) -> [已经运行] Activity A(接收发送的项目)”)实际完成的是:

Activity A = new Instance -> 转到 Activity B = new Instance -> 再次转到 Activity A = new Instance

所以您的 Activity “堆栈”实际上是 Activity A 的 2 个实例和 Activity B 的一个实例。这就是为什么您在 Activity A 中的第二次调用会初始化它并再次调用“onCreate()”。该问题的解决方案之一,可能是最好的解决方案是:

从 Activity A 使用此方法启动 Activity B:'startActivityForResult()'。然后在 Activity B 中,尽管按照您当前的方式启动 Activity A,但尝试通过此函数将结果设置回 Activity A:“setResult(int resultCode,Intent data)”,然后在 Activity B 中调用“finish()”。在 Activity 中实现“onActivityResult()”方法。

我现在将解释应用程序的生命周期:

  • Activity A 已初始化并启动 Activity B 等待结果以便对其执行“某事”。到目前为止一切顺利。
  • Activity B 已初始化,提交后它会为 Activity A 设置结果。然后它自行完成并自动将结果传递给上一个 Activity 。
  • Activity A 再次获得焦点,ALREADY INITIALIZED 并调用“onActivityResult()”方法。在 Activity B 中设置的“Intent ”现在在 Activity B 中传递。

告诉我这是否有帮助,以及您是否需要一些示例代码。

关于android - 重新启动已经运行的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548553/

相关文章:

android - Assets 困惑

android - 在 react native 的 websocket uri 中传递参数不起作用

java - 无法将值从一个 Intent 传递到另一个 Intent

android - 为什么我不能通过引用启动 Activity ?

android - Android应用程序关闭/设置为后台时如何执行后台任务?

android - 设置标题背景颜色

android - 无法从扫描结果连接 SSID - Android

Android Activity 生命周期和锁定/解锁设备

java - 选项卡式设计中的 ListView 空指针

android - 为什么 Fragment 的 onCreate() 有时会先于 Activity 的 onCreate() 被调用?