【问题标题】:Android activity/fragment recreated when low memory内存不足时重新创建 Android 活动/片段
【发布时间】:2015-07-01 16:23:13
【问题描述】:

我正在实现一个具有多个活动和基于片段的应用程序。 我遇到的是,如果我开始一个活动,并在片段之间转换,现在如果我按下主页按钮回到主屏幕。然后我开始使用消耗内存的应用程序。 当我回到我的应用程序时,我可以知道它已被重新创建并且片段已被恢复。但是当我点击返回时,片段返回堆栈似乎是错误的,片段之间的自定义动画也不再受到影响。

就我而言,我真的不希望系统从低内存返回时重新创建。 有没有办法在内存不足而不是重新创建活动时强制应用重启?

【问题讨论】:

    标签: android android-activity fragment low-memory


    【解决方案1】:

    您可能知道,最好的解决方案是修复您的活动,以便它们正确处理生命周期事件并保存/恢复状态。然后,当您的应用程序进入后台并返回前台时,用户会看到他/她上次离开时​​的应用程序。这是最好的用户体验,也是 Android 多任务的工作方式。

    如果您迫切需要解决方法,请考虑使用 Activity 的onTrimMemory() 方法。使用整数代码调用此方法,该代码报告活动状态的变化,例如活动何时不再可见,以及应用程序在最近使用的应用程序列表中的位置。例如,您可以检查TRIM_MEMORY_UI_HIDDEN 并调用finish() 来结束活动。

    同样,这不是首选的解决方案,只是一个快速修复。

    【讨论】:

    • 我也面临同样的问题,当再次创建 Activity 时,片段行为不端。在这种情况下,理想的解决方案是什么。如何在内存不足的情况下维护片段?
    【解决方案2】:

    如果您使用 API 级别 13 或更低,您也可以使用 onLowMemory():

    当整个系统内存不足时调用,并且 积极运行的进程应该减少它们的内存使用。虽然 没有定义调用 this 的确切点,通常它 当所有后台进程都被杀死时会发生。那是, 在达到终止进程托管服务和 我们希望避免杀死的前台 UI。

    你应该实现这个方法来释放任何缓存或其他 您可能持有的不必要的资源。该系统将 从此方法返回后为您执行垃圾回收。

    最好你应该实现 onTrimMemory(int) from ComponentCallbacks2 增量卸载您的资源基于 不同级别的内存需求。该 API 可用于 API 级别 14 及更高版本,所以你应该只使用这个 onLowMemory() 方法作为 旧版本的后备,可以被视为相同 onTrimMemory(int) 与 TRIM_MEMORY_COMPLETE 级别。

    欲了解更多信息:http://developer.android.com/reference/android/app/Activity.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      相关资源
      最近更新 更多