Activity 回收

asssf3214 2011-05-08 10:10:22
加精
请问Android回收内存时是kill整个应用程序还是Activity呢?如果是按Activity回收是按出栈的顺序回收吗?
...全文
2432 78 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
78 条回复
切换为时间正序
请发表友善的回复…
发表回复
顾小林 2013-09-16
  • 打赏
  • 举报
回复
mark 一下
罗小辉 2013-09-16
  • 打赏
  • 举报
回复
引用 22 楼 oyq_yangy 的回复:
[Quote=引用 18 楼 asssf3214 的回复:] 引用 16 楼 oyq_yangy 的回复: 引用楼主 asssf3214 的回复: 请问Android回收内存时是kill整个应用程序还是Activity呢?如果是按Activity回收是按出栈的顺序回收吗? 内存管理是针对的是process,不是activity。 http://fonter.iteye.com/blog/906327 能不能这样理解,如果Activ…… [/Quote] 不能这样,activity1和activity2可能在不同的进程中。tabhost不就是个layout。和进程,activity无关
屌丝 英语看不懂
唐石山 2011-08-05
  • 打赏
  • 举报
回复
看源代码
asssf3214 2011-06-13
  • 打赏
  • 举报
回复
有没有人知道,如果父Activity被回收了,子Activity一定会被销毁吗?
wicheng28 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 huweilong1030 的回复:]
Android系统尽最大可能的维护一应用程序进程,但是当系统内存非常低时必须移除老的进程来获取内存。为了决定哪些进程维护,哪些进程被杀死,Android系统基于进程中运行的组件和组件的状态为每个进程引入重要性的概念。根据重要性从低到高来杀死应用程序进程。该重要性分为五个等级,

1、正在和用户进行交互的前台进程
2、可视进程
3、其他服务进程
4、后台进程
5、空进程
[/Quote]
赞同
wei1kai2 2011-05-24
  • 打赏
  • 举报
回复
不是很懂。。
haosimentu 2011-05-22
  • 打赏
  • 举报
回复
个人理解一个android应用就是一个运行虚拟机的linux进程。而activity、service都是该进程内的任务。
所以如果释放内存就需要杀死进程,因为进程是分配内存的单位,只不过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,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
beiyiwang133 2011-05-22
  • 打赏
  • 举报
回复
学习一下!
chenleilei77 2011-05-22
  • 打赏
  • 举报
回复
学习一下
winteredchengxu 2011-05-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dinjay 的回复:]
回收是系统判断优先级等关系后,释放系统认为没用,可以释放的内存。
activity也是如此,比如说,栈上只允许同时有5个activity存在,那你再启动一个activity,一般情况下系统就会把第一个给干掉,但是优先是把最耗cpu的那个先干掉。
[/Quote]
那也就是以出栈的形式进行回收内存的吧?
santc 2011-05-20
  • 打赏
  • 举报
回复
还是有点不明白的。。我怎么看了,晕哦...
santc 2011-05-20
  • 打赏
  • 举报
回复
还是有点不明白的。。我怎么看了,晕哦...
妮_梦 2011-05-20
  • 打赏
  • 举报
回复
我怎么看了,还是有点不明白的。。晕哦
valenhua 2011-05-20
  • 打赏
  • 举报
回复
android不是以进程来导向,它让开发者更关注组件层面上的开发而不是进程上的管理。
当内存不够的时候会有一系列的算法去回收盏底的不活动的Activity,按优先级别,先是停止,后是暂停等。
yongyuandeni 2011-05-20
  • 打赏
  • 举报
回复
Activity
yjihxk421 2011-05-19
  • 打赏
  • 举报
回复
多看看书明白了
cjypower 2011-05-18
  • 打赏
  • 举报
回复
内存管理是针对process的 而不是针对activity的。每个activity都是有生命周期的。比方说一个栈内有3个activity1 activity2 activity3 当按一次返回按钮 退回到Activity2 此时Activity3就已经被干掉了。依次这样直到退回主的Activity1 主Activity生命首期和其它的有点不一样,kill它有两种方式一个是手动调用finish函数,另一种自动 系统会定时检查手机内存是否够用,不够用的话系统会Kill这些没用的activity(当然这里是指你没有做退出的处理,直接按手机返回按钮)
lmc158 2011-05-18
  • 打赏
  • 举报
回复
回收是系统判断优先级等关系后,释放系统认为没用,可以释放的内存。
ws_1122 2011-05-18
  • 打赏
  • 举报
回复
收是系统判断优先级等关系后,释放系统认为没用,可以释放的内存。
activity也是如此,比如说,栈上只允许同时有5个activity存在,那你再启动一个activity,一般情况下系统就会把第一个给干掉,但是优先是把最耗cpu的那个先干掉。
v252v 2011-05-18
  • 打赏
  • 举报
回复
rtggaerg
加载更多回复(33)

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧