当活动从后台(暂停)到前台时重新创建 Android 活动

Posted

技术标签:

【中文标题】当活动从后台(暂停)到前台时重新创建 Android 活动【英文标题】:Android Activity is recreated when activity from background(pause) to foreground 【发布时间】:2018-07-31 21:22:21 【问题描述】:

您好,android 专业人士,

我遇到了一个关于某个活动生命周期的小问题。我一步一步提到了我的问题:-

    从主屏幕启动带有应用图标的应用。 在活动 A 的 recyclerview 中的编辑文本字段中输入一些数据。 按主页按钮并启动其他应用程序(任何应用程序,如 facebook、twitter)。 现在我们的应用处于暂停状态,并且在后台使用空值。 现在单击最近的应用程序按钮并启动我们的应用程序(从后台)。 现在应用程序通过 Activity A 启动,但该 Activity 被重新创建。

我还在开发者选项中禁用了不要保留活动。我的测试选项卡是 Levono A8 50。

我在这个问题上浪费了 3 天的时间。任何人都对这个问题有任何想法。 谢谢

【问题讨论】:

这个问题是内存特定的 你检查过其他设备吗? 我在 lenovo a3300-gv kitkat 版本中进行了测试,工作正常。但不适用于 Levono A8 50 棒棒糖版本。任何优化内存规格的机会 这就是 Android 的行为。如果需要更多资源,操作系统将破坏活动(不在前台)。在其他方面,这可以被视为 Bettery 和资源优化的一项功能。 嗨,ADM,我们可以控制这种行为吗? 正如我所说,它依赖于操作系统,您无法控制它。您可以做的是在停止期间保存 Activity 的状态。 【参考方案1】:

不是问题,而是功能 - 您的活动可以在失去焦点后被杀死并重新创建,如 Android 操作系统所希望的 - 习惯它。您的活动应在 onPause() 中保存所有必要的状态

【讨论】:

您好康斯坦丁,该活动有 recyclerview,其中包含许多带有复选框和编辑文本字段的行。很难得救。有什么想法吗? 您可以使用一些数据绑定库(我已经开发了一个:github.com/ko5tik/andject)以及如何使用它来读取/写入首选项:github.com/ko5tik/accanalyser/blob/master/src/de/pribluda/…【参考方案2】:

在启动另一个应用程序后,如果您的当前活动不再可见,它就会处于停止状态。但是,您不能指望保持该状态的活动。如果需要更多资源,Android 将销毁该活动(然后稍后重新创建它)。如果您希望数据持久化,则需要使用 SharedPreferences 或数据库在 onSaveInstanceState() 中存储它们。

查看here了解更多信息。

【讨论】:

嗨,kazume,这个活动有 recyclerview,里面有很多行,带有复选框和 edittext 字段。很难得救。有什么想法 RecyclerView(或适配器)的数据源是什么。我建议将其移至与活动生命周期相关的 ViewModel(来自架构组件)。 嗨,kazume,我们已经使用 viewmodel 将数据绑定到 recyclerview。但我不知道如何在 recyclerview 中保存和显示用户输入的数据。

以上是关于当活动从后台(暂停)到前台时重新创建 Android 活动的主要内容,如果未能解决你的问题,请参考以下文章

当app从后台移动到前台时会触发哪个JS事件

当应用程序进入暂停状态时取消本地通知。(从后台删除)

活动重新创建意图附加内容为空

背景和暂停的app状态之间的混淆

当应用程序从后台进入前台时,onBackPress() 不起作用

Android - 为视频创建后台服务