请问Android回收内存时是kill整个应用程序还是Activity呢?如果是按Activity回收是按出栈的顺序回收吗?
解决方案 »
- 关于android下的broadcast和service的问题请教
- 程序的入口Activity问题
- NDK引用自定义函数库,undefined reference问题。
- 统一开发环境内容更新啦!!!!!!
- myeclipse怎么搭建android2.2环境
- android内存溢出!!求具体的解决办法
- android系统的手机,求推荐
- android: contentprovider uri判断问题,求大神现身!!!
- 关于改变入口Activity的问题
- C++服务器 socket传图片给android客户端,用BitmapFactory.decodeByteArray解析不出来?
- android ImageView 图片旋转?
- 求帮助,怎么把数据转换成listview格式啊,求大神!
activity也是如此,比如说,栈上只允许同时有5个activity存在,那你再启动一个activity,一般情况下系统就会把第一个给干掉,但是优先是把最耗cpu的那个先干掉。
no, 有一点说错了,那就是有个优先级的问题。当一个新的 Activity启动时,当前前台屏幕进入到栈的顶端。当用户使用Back按钮导航回来的时候,或者前台的Activity结束时,下一个 Activity上移变成active状态。
应用程序的优先级受它的高优先级Activity影响。Android的内存管理器在决定哪个应用程序要被终止来释放资源时,会使用这个栈,并依据应用程序中的Activity来确定应用程序的优先级。Activity活动状态和非活动状态的优先级也是不一样的。而低优先级的Activity会被先kill
能不能这样理解,如果Activity2是在Activity1中通过startActivity启动的,那么Activity2是alive的情况下,Activity1就一定是alive的?
还有一种就是TabHost中Tab1是alive的,是不是tab0就一定alive(tab1通过tab0启动)
不能这样,activity1和activity2可能在不同的进程中。tabhost不就是个layout。和进程,activity无关
难道android的process与应用程序不是一一对应的?activity不属于process?
activity也是如此,比如说,栈上只允许同时有5个activity存在,那你再启动一个activity,一般情况下系统就会把第一个给干掉,但是优先是把最耗cpu的那个先干掉。
2、可视进程
3、其他服务进程
4、后台进程
5、空进程
当内存不够的时候会有一系列的算法去回收盏底的不活动的Activity,按优先级别,先是停止,后是暂停等。
所以如果释放内存就需要杀死进程,因为进程是分配内存的单位,只不过acitvity等组件会影响进程占有内存的大小,acitivity内存的是否释放是看程序是否使用finish方法关闭该activity,其他组件类似。即android不会去杀死activity去释放内存。
而杀死应用是按照应用程序的优先级安排的,一个应用对应一个进程,进程优先级如下,Android将进程分为六大类:
1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer Storage,Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground),但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。
2.可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法)
3.次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止
4.后台进程(hidden):虽然作者用了hidden这个词,但实际即是后台进程(background),就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户根据自己的使用习惯找到一个平衡点
5.内容供应节点(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权
6.空进程(empty):没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
不能这样,activity1和activity2可能在不同的进程中。tabhost不就是个layout。和进程,activity无关
屌丝 英语看不懂