我正在实现一个具有多个活动和基于片段的应用程序。我遇到的是,如果我开始一个活动,并在片段之间转换,现在如果我按下主页按钮回到主屏幕。然后我开始使用消耗内存的应用程序。当我回到我的应用程序时,我可以知道它已被重新创建并且片段已被恢复。但是当我点击返回时,片段返回堆栈似乎是错误的,片段之间的自定义动画也不再受到影响。
就我而言,我真的不希望系统从低内存返回时重新创建。有没有办法在内存不足而不是重新创建活动时强制应用重启?
我正在实现一个具有多个活动和基于片段的应用程序。我遇到的是,如果我开始一个活动,并在片段之间转换,现在如果我按下主页按钮回到主屏幕。然后我开始使用消耗内存的应用程序。当我回到我的应用程序时,我可以知道它已被重新创建并且片段已被恢复。但是当我点击返回时,片段返回堆栈似乎是错误的,片段之间的自定义动画也不再受到影响。
就我而言,我真的不希望系统从低内存返回时重新创建。有没有办法在内存不足而不是重新创建活动时强制应用重启?
您可能知道,最好的解决方案是修复您的活动,以便它们正确处理生命周期事件并保存/恢复状态。然后,当您的应用程序进入后台并返回前台时,用户会看到他/她上次离开时的应用程序。这是最好的用户体验,也是 Android 多任务处理的工作方式。
如果您迫切需要解决方法,请考虑使用 Activity 的onTrimMemory()方法。使用整数代码调用此方法,该代码报告活动状态的变化,例如活动不再可见的时间,以及应用程序在最近使用的应用程序列表中的位置。例如,您可以检查TRIM_MEMORY_UI_HIDDEN并调用finish()
以结束活动。
同样,这不是首选的解决方案,只是一个快速修复。
onLowMemory()
如果您使用 API 级别 13 或更低,您也可以使用:
当整个系统的内存不足时调用它,并且主动运行的进程应该减少它们的内存使用量。虽然没有定义调用它的确切时间,但通常会在所有后台进程都被杀死时发生。也就是说,在达到终止托管服务和前台 UI 的进程之前,我们希望避免终止。
您应该实现此方法以释放您可能持有的任何缓存或其他不必要的资源。从这个方法返回后,系统会为你执行一次垃圾回收。
最好,您应该从 ComponentCallbacks2 实现 onTrimMemory(int) 以根据不同级别的内存需求逐步卸载您的资源。该 API 可用于 API 级别 14 和更高级别,因此您应该只使用此 onLowMemory() 方法作为旧版本的后备,可以将其视为与具有 TRIM_MEMORY_COMPLETE 级别的 onTrimMemory(int) 相同。
更多信息:http: //developer.android.com/reference/android/app/Activity.html