嗨,我想知道Android是如何管理内存的,我找不到确切的答案。假设我有一个应用程序在当前activity堆栈上有5个活动(4个停止,1个恢复),没有连接服务。我按HOME键,这样我的所有活动都停止了。我启动了一些其他内存消耗应用程序,而整个设备内存开始变低。问题是
…我的申请会发生什么?
更新:
在问这个问题之前,我看过几次activity生命周期,但它没有回答我的问题。我做了一些测试,我有了一些答案。DDMS中的“停止进程”是测试的线索。
我还没有测试问题1的答案,但正如指南所说:
如果一个activity被暂停或停止,系统可以从内存中删除该activity,要么要求它完成,要么干脆终止它的进程。
似乎可以轻轻地(使用onDestroy方法)破坏其中的一个或多个活动,而不杀死进程。在返回它们时,您只需得到(onCreate+bundle)。
问题2回答:
是的。通常情况下,系统会杀死整个进程,这意味着包括活动和静态字段在内的所有数据都被销毁。这做得不好-您不会为任何暂停/停止的活动获得onDestroy或finialize()。这就是为什么saveInstanceState()在onPause方法之前被调用的原因。onPause基本上是最后一个应该保存东西的方法,因为在使用这个方法之后,您就再也看不到onStop或ondestroy了。系统可以扼杀进程,摧毁你的所有对象,不管它们持有什么,不管它们在做什么。
问题3回答:
当你回到一个被杀死的应用程序时会发生什么?
通常,当用户从主屏幕重新选择任务时,系统会在某些情况下清除任务(从根activity上方的堆栈中删除所有活动)。通常,如果用户在一定时间内(如30分钟)没有访问任务,则会执行此操作。
结论?
就这样吧...希望我帮了我的essey:)
首先请看一下这个:
onPause()在系统即将开始恢复以前的activity时调用。这通常用于将未保存的更改提交到持久数据、停止动画和其他可能消耗CPU的东西等。此方法的实现必须非常快,因为在此方法返回之前不会恢复下一个activity。然后是onResume()(如果activity返回到前面),或者onStop()(如果它对用户不可见)。
当activity对用户不再可见时调用onStop(),因为另一个activity已经恢复并覆盖了这个。这可能会发生,要么是因为一个新的activity正在启动,要么是一个现有的被带到这一个前面,要么这一个正在被摧毁。如果这个activity要回来与用户交互,则后面是onRestart();如果这个activity要消失,则后面是onDestroy()。
因此,当您按下设备上的“Home”按钮时,您当前的前景activity将被放在onpause()
上,然后onstop()
上,其他4个应该保持onstop()
根据谷歌的文件:
并且,对于流程生命周期:
流程生命周期3。一个后台activity(一个对用户不可见且已暂停的activity)不再是关键的,因此系统可以安全地杀死它的进程,以为其他前台或可见进程回收内存。如果它的进程需要被杀死,当用户导航回activity时(使其再次在屏幕上可见),它的onCreate(Bundle)方法将被调用,并使用它先前在onSaveInstanceState(Bundle)中提供的savedInstanceState以便它能够以用户上次离开它的相同状态重新启动自己。
以上引用均来自:Android开发者参考:activity
确认系统可以破坏非acitve活动,并在你启动一些消耗内存的应用程序时回收内存。您可以在activity中实现类似于:isinstining()
,然后使用DDMS中的“kill”按钮检测系统丢弃了哪些活动。但我猜系统会先毁掉最老的一个。然而,当“发射activity”被回收后,保留其他活动就没有意义了。
更新
以下是我从这里找到的一些观点:
停止状态
当一个activity不可见,但仍在内存中时,我们说它处于停止状态。停下来的activity有可能被重新拉回前线,重新变成一个奔跑的activity。或者,它可以被销毁并从记忆中删除。
系统将周围的活动保持在停止状态,因为用户很可能仍希望在不久的某个时间内返回这些活动,并且重新启动停止的activity远比从头开始一个activity要便宜得多。这是因为我们已经在内存中加载了所有的对象,只需要将它们全部放到前台。
停止的活动可以在任何时候从内存中删除。
正如你们可能知道的,Android支持嵌套片段,也通过API级别为17的支持库。基本上,我正在尝试将嵌套片段添加到ViewPager的片段中,并熟悉这个新的不错的特性。 在第一次应用程序发布时,一切都按预期进行,即我可以添加子片段、浏览这些片段、处理后堆栈等。。 但问题是,当我通过单击后退按钮离开应用程序并重新启动应用程序时,我大多数情况下都会出现以下异常,并不总是: 整个项目都可以在这里找到。
游戏活动中: 这也适用于:
我目前正在开发的一个新应用程序遇到了一个奇怪的问题,如果我将应用程序发送到后台(Home按钮),然后使用应用程序图标重新启动应用程序,除了根活动之外的所有活动都会被销毁(在日志中,我会获得所有活动的OnDestroy,除了调用OnResume的根活动)。 如果我将其发送到后台并从当前任务中恢复,它将恢复应用程序。 我已经将< code > Android:launch mode = " singl
我有一个有三个活动的应用程序。第一活动,第二活动,第三活动。 在第一个活动中有一个按钮,它启动第二个活动。在第二个活动中,有两种方法可以转到第三个活动。但是有一个方法有代码: 两个变体都使用此代码片段。 此代码在-12秒内自动运行 我的问题是:当用户按下Back键时,ThirdActivity会打开,但几秒钟后,ThirdActivity会从第一个变体再次打开。 那么,如何完全终止一个活动,使其在
我使用startActivity(Intent)在我的Android应用程序中创建一个新活动。 有可能扼杀其中一项活动吗?如果有,如何扼杀? 我想要这样 Activity4->Activity1->关闭应用程序
我正在尝试构建一个使用条形码阅读器的android应用程序。 null 以上所有操作都按预期工作,但在onActivityResult事件处理之后,应用程序终止。 在日志文件中,我只能找到一个通用的app-kill消息 您可以在下面找到代码片段并注销。 马蒂亚