请问Android回收内存时是kill整个应用程序还是Activity呢?如果是按Activity回收是按出栈的顺序回收吗?

解决方案 »

  1.   

    回收是系统判断优先级等关系后,释放系统认为没用,可以释放的内存。
    activity也是如此,比如说,栈上只允许同时有5个activity存在,那你再启动一个activity,一般情况下系统就会把第一个给干掉,但是优先是把最耗cpu的那个先干掉。
      

  2.   


    no, 有一点说错了,那就是有个优先级的问题。当一个新的 Activity启动时,当前前台屏幕进入到栈的顶端。当用户使用Back按钮导航回来的时候,或者前台的Activity结束时,下一个 Activity上移变成active状态。
    应用程序的优先级受它的高优先级Activity影响。Android的内存管理器在决定哪个应用程序要被终止来释放资源时,会使用这个栈,并依据应用程序中的Activity来确定应用程序的优先级。Activity活动状态和非活动状态的优先级也是不一样的。而低优先级的Activity会被先kill
      

  3.   

    怎么知道Activity的优先级呢?
      

  4.   

    内存管理是针对的是process,不是activity。http://fonter.iteye.com/blog/906327
      

  5.   


    能不能这样理解,如果Activity2是在Activity1中通过startActivity启动的,那么Activity2是alive的情况下,Activity1就一定是alive的?
    还有一种就是TabHost中Tab1是alive的,是不是tab0就一定alive(tab1通过tab0启动)
      

  6.   


    不能这样,activity1和activity2可能在不同的进程中。tabhost不就是个layout。和进程,activity无关
      

  7.   


    难道android的process与应用程序不是一一对应的?activity不属于process?
      

  8.   

    请问Android回收内存时是kill整个应用程序还是Activity呢?如果是按Activity回收是按出栈的顺序回收吗?
      

  9.   

    sdafsaf 
      

  10.   

    回收是,先回收不用的activity,如果内存还吃紧,就kill进程了
      

  11.   

    API中有一段讲这个的,就在activity的生命周期那里,可以看看,讲得很清楚了
      

  12.   

    收是系统判断优先级等关系后,释放系统认为没用,可以释放的内存。
    activity也是如此,比如说,栈上只允许同时有5个activity存在,那你再启动一个activity,一般情况下系统就会把第一个给干掉,但是优先是把最耗cpu的那个先干掉。
      

  13.   

    内存管理是针对process的 而不是针对activity的。每个activity都是有生命周期的。比方说一个栈内有3个activity1 activity2 activity3 当按一次返回按钮 退回到Activity2 此时Activity3就已经被干掉了。依次这样直到退回主的Activity1 主Activity生命首期和其它的有点不一样,kill它有两种方式一个是手动调用finish函数,另一种自动 系统会定时检查手机内存是否够用,不够用的话系统会Kill这些没用的activity(当然这里是指你没有做退出的处理,直接按手机返回按钮)
      

  14.   

    Android系统尽最大可能的维护一应用程序进程,但是当系统内存非常低时必须移除老的进程来获取内存。为了决定哪些进程维护,哪些进程被杀死,Android系统基于进程中运行的组件和组件的状态为每个进程引入重要性的概念。根据重要性从低到高来杀死应用程序进程。该重要性分为五个等级,1、正在和用户进行交互的前台进程
    2、可视进程
    3、其他服务进程
    4、后台进程
    5、空进程
      

  15.   

    Activity的优先级,里面说的很明白
      

  16.   

    Android的Activity就是一坨Shi,鉴定完毕!
      

  17.   

    这个问题,ANDROID 的书上说得很明白。Activity 进程的优先级是最高的,这是相比SERVIVE来说,不过ACTIVITY程序有三种状态,运行、暂停、停止,那些进入停止状态的ACT会被系统杀掉,不过不是立即清理,而是系统认为不清理一些东西,机子就跑不下去的时候才会清理。如果清理了停止态的程序都还不行的话,就再清理暂停态的,如果这个都不行,那就是砖头儿了。ANDROID 的系统对进程的管理与其它的一些操作系统都不同,所以,不能用已经熟知的操作系统来考虑ANDROID的行为。
      

  18.   

    android不是以进程来导向,它让开发者更关注组件层面上的开发而不是进程上的管理。
    当内存不够的时候会有一系列的算法去回收盏底的不活动的Activity,按优先级别,先是停止,后是暂停等。
      

  19.   

    个人理解一个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,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
      

  20.   

    有没有人知道,如果父Activity被回收了,子Activity一定会被销毁吗?
      

  21.   


    不能这样,activity1和activity2可能在不同的进程中。tabhost不就是个layout。和进程,activity无关
    屌丝 英语看不懂