嗨,我想知道Android如何管理内存,我无法在任何地方找到准确的答案。 假设我有一个在当前活动堆栈上有5个活动的应用程序(4个被停止,1个被恢复),没有连接服务。我按HOME按钮,以便我的所有活动都停止。 我启动了一些其他耗费内存的应用程序,整体设备内存开始不足。而问题是Android销毁活动,查杀进程
...我的应用程序会发生什么?
系统能否销毁一个或一些我的活动来恢复内存?
系统会杀死我的应用程序的整个过程吗?所有的活动都会被很好地摧毁吗?
当我完全死亡后回到我的应用程序时会发生什么?它会从开始(像第一次开始)开始,还是会尝试恢复活动到previeous状态/如果是 - 它只是堆栈顶部的一个还是全部?
UPDATE:
之前问这个问题,我已经看到了活动的生命周期几次,但它并没有回答我的问题。 我做了一些测试,我有一些答案。 DDMS中的“停止过程”是测试的一个线索。
我没有测试的回答问题1,但作为指导说:
如果活动暂停或停止,该系统可以通过从内存中删除该活动 要求它完成,或者干脆就杀掉它的 进程。
看起来,一个或多个活动可以轻轻地销毁(使用onDestroy方法)而不会终止进程。当你回到他们的时候,你会得到(onCreate + bundle)。
问题2回答:
YES。通常系统会杀死整个过程,这意味着包括活动和静态字段在内的所有数据都会被销毁。这不是很好 - 你不会为任何暂停/停止的活动获取onDestroy或finialize()。这就是为什么在onPause方法之前调用saveInstanceState()的原因。 onPause基本上是您应该保存某些内容的最后一种方法,因为在此方法之后,您永远无法看到onStop或onDestroy。系统可以杀死所有对象的进程,无论他们持有什么以及他们在做什么。
问题3回答:
,当你回到一个杀死的应用会发生什么事?
在Android 2.2之前 - 应用程序将从开始启动,并启动启动器。
从2.2开始 - 系统将恢复以前的应用程序状态。这是什么意思?这意味着最后可见的活动将被重新创建(onCreate + bundle)。活动堆栈会发生什么?堆叠很好,但其上的所有活动都已死亡。当您通过后退按钮返回时,它们中的每一个都将被重新创建(onCreate + bundle)。 有关于一两件事:
通常,系统清除一个任务(删除所有活动从 堆的根活动上文)在某些情况下,当用户 重新选择从该任务主屏幕。通常,如果 用户在一段时间内未访问任务,例如 30分钟,则完成此操作。
结论?
不要以为处理活动的旋转问题可以通过机器人来解决 :configChanges =“方向”。当你这样做时,你会得到许多其他的问题,你甚至不知道。
用DDMS测试你的应用程序 - 停止进程按钮。 See This
使用静态变量时要小心。不要认为当你在活动1中初始化它们时 - 你将在活动2中初始化它们。初始化全局静态的唯一安全位置是Application类。
请记住,您可能永远不会看到onStop或onDestroy。关闭文件/数据库,停止onPause中的下载程序。当你想让应用程序在BG中执行某些操作时 - 使用前台服务。
这将是它...希望我和我的essey :)帮助
2013-01-17
Mark
+0
对于您的设想,这5项活动是来自同一个应用程序还是来自多个不同的应用程序? –
+0
“我有一个在当前活动堆栈上有5个活动的应用程序”当然,它们都来自我的,同一个过程应用程序。 –
+3
谢谢你,这正是我的问题......你的问题和答案帮了我很多。 –