Mar*_*ark 116 android android-activity
嗨,我想知道Android如何管理内存,我无法在任何地方找到准确的答案.假设我有一个应用程序在当前活动堆栈上有5个活动(4个被停止,1个被恢复),没有连接服务.我按下HOME按钮,以便停止所有活动.我启动了一些其他内存消耗应用程序,整体设备内存开始变低.问题是
......我的申请会怎样?
更新:
在提出这个问题之前,我已经看过几次Activity生命周期,但它没有我的问题的答案.我做了一些测试,我有一些答案.DDMS中的"停止过程"是测试的线索.
我没有测试问题1的答案,但正如指南所说:
如果某个活动暂停或停止,系统可以通过要求完成活动或仅删除其进程来从内存中删除活动.
似乎可以轻轻地销毁一个或多个活动(使用onDestroy方法)而不会终止进程.回到它们时,您将获得(onCreate + bundle).
问题2答案:
是.通常系统杀死整个过程,这意味着包括活动和静态字段在内的所有数据都被销毁.这样做不是很好 - 你不会为任何暂停/停止的活动获得onDestroy或finialize().这就是在onPause方法之前调用saveInstanceState()的原因.onPause基本上是你应该保存的最后一个方法,因为在这个方法之后你永远不会看到onStop或onDestroy.系统可以扼杀破坏所有物体的过程,无论它们持有什么以及它们正在做什么.
问题3答案:
当你回到被杀的应用程序时会发生什么?
通常,当用户从主屏幕重新选择该任务时,系统会在某些情况下清除任务(从根活动上方的堆栈中删除所有活动).通常,如果用户未访问任务一段时间(例如30分钟),则完成此操作.
结论?
那将是它...希望我帮助我的essey :)
dum*_*ers 30
首先请看一下:
onPause() 在系统即将开始恢复上一个活动时调用.这通常用于将未保存的更改提交到持久数据,停止动画以及可能消耗CPU等的其他事情.此方法的实现必须非常快,因为在此方法返回之前,下一个活动将不会恢复.如果活动返回到前面,则后跟onResume(),如果对用户不可见,则返回onStop().
onStop()当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动.这可能是因为正在开始新活动,现有活动被带到这个活动之前,或者这个活动正在被销毁.如果此活动返回与用户交互,则执行onRestart(),如果此活动消失,则执行onDestroy().
所以,当您按下设备上的"HOME"键,您当前的前景活动放到onPause()
随后onStop()
,其他4仍应onStop()
根据谷歌的文件:
- 如果屏幕前景中的活动(位于堆栈顶部),则它处于活动状态或正在运行.
- 如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动专注于您的活动),则会暂停活动.暂停的活动完全处于活动状态(它维护所有状态和成员信息并保持附加到窗口管理器),但可以在极低内存情况下被系统杀死.
- 如果活动被另一个活动完全遮挡,则会停止活动.它仍然保留所有状态和成员信息,但是,它不再对用户可见,因此其窗口被隐藏,并且当其他地方需要内存时,它通常会被系统杀死.
- 如果某个活动暂停或停止,系统可以通过要求完成活动或仅删除其进程来从内存中删除活动.当它再次显示给用户时,必须完全重新启动并恢复到之前的状态.
并且,对于流程生命周期:
进程生命周期 3.后台活动(用户不可见且已暂停的活动)不再重要,因此系统可以安全地终止其进程以回收其他前台或可见进程的内存.如果需要杀死它的进程,当用户导航回活动(再次在屏幕上显示)时,将使用之前在onSaveInstanceState(Bundle)中提供的savedInstanceState调用其onCreate(Bundle)方法,以便它可以在用户上次离开的状态下重启自己.
以上所有引用均来自:Android开发者参考:活动
经证实,当您启动一些内存消耗应用程序时,系统可以破坏非活动活动并回收内存.您可以isFinishing()
在您的活动中实现:然后在DDMS中使用"kill"按钮来检测系统正在删除哪些活动.但我想系统会先破坏最老的系统.但是,当"启动活动"被回收时,保留其他活动是没有意义的.
UPDATE
以下是我从这里发现的一些意见:
停止状态
当活动不可见但仍在内存中时,我们说它处于停止状态.停止活动可以重新回到前面,再次成为Running活动.或者,它可以被破坏并从内存中删除.
系统将活动保持在停止状态,因为用户可能仍希望很快回到那些活动,并且重新启动已停止的活动比从头开始活动便宜得多.那是因为我们已经将所有对象加载到内存中,只需要将它们全部放到前台.
可以随时从内存中删除已停止的活动.
归档时间: |
|
查看次数: |
50621 次 |
最近记录: |