本文来自:安卓航班网

      Android针对Activity的管理使用的是栈,就是说某一个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的Activity才有可能浮到栈顶,或者有一个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。从这里我们可以看出Android似乎是依照一种层次管理所有的Activity的,为什么这么做,个人觉得原因在于Android对Activity的作用定位很重要的一点是考虑其管理与用户交互的作用,而谈到交互,首要的就是界面了,因此Activity是直接涉及到与用户交互的界面处理的,而任意时刻与用户处于交互状态的界面只能有一个,所以Android针对Activity的管理采用了具有层次感的栈的数据结构,理解这一点对于Activity一些状态转换的细节处理非常重要。     依据这种基于界面层次性的理解,官方文档主要提了两点:
     1. 只有处于栈顶的Activity一定是出于运行状态的。当启动一个新的Activity时,系统会将它置于栈顶,同时使其运行,这个时候先前处于栈顶的Activity则被压栈,只有当栈顶的Activity退出时才可能重新处于栈顶。
     2.一个Activity总的来说拥有四种状态,分别是
       1)激活(运行)状态:  此时它一定是在屏幕的最前端的,对应Activity栈来说,它是在栈顶的;
       2)暂停状态:此时它在屏幕上仍然是可见的,但是失去了焦点。这种情况会发生在当有一个不会占满整个屏幕或者拥有透明属性的Activity启动并获得了屏幕焦点时。一个暂停状态的Activity还是存活的(alive),它仍然维持着自己的各个内部状态和成员信息,仍然和window manager保持连接,但是系统可能会在手机内存极低的情况下杀掉该Activity;
       3)终止状态:此时这个Activity在屏幕上完全不可见,它已经被其他的Activity挡住了。这时它维护着自己的各个内部状态和成员信息,但是由于用户已完全看不见它,其window也会被隐藏掉,也就是说window manager不再管理其window信息了。停止状态下的Activity会经常由于手机的内存征用问题被系统杀掉。
       4)当Activity被暂停或者终止时,系统可以把它从内存中清除,这个过程也许会提示用户是否要结束该Activity,也许只会简单地杀掉其进程。当这个Activity重新被用户调出来显示在界面上时,用户自己必须保证Activity能够完全恢复先前维护的内部状态信息,以使其回到Activity内部所处先前的状态,以笔者的经验这种情况如果处理不好很容易出现问题。
      
      这第二点个人认为实际上依据界面层次考虑就是3种情况:
      a.active/running: 此时Activity管理的界面可见,且直接面对和用户的交互;
      b.pause: 此时Activity管理的界面可见,但处于后端,类似变成了背景;
      c.stop: 此时Activity管理的界面完全不可见。

澄清了上述重要的概念之后,再来看需要研究的Activity具体的函数,很自然可以知道最重要的函数一定就是针对上面三种情况加上Activity自身创建和消毁所涉及到的几个函数了:
public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();   
     protected void onRestart();
     protected void onResume();
     protected void onPause();
     protected void onStop();
     protected void onDestroy();

}

对这些函数官方文档也做了比较详细的说明,欢迎大家探讨~~

原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=1262&extra=page%3D2

posted on 2011-07-10 21:07  泉と緣  阅读(211)  评论(0编辑  收藏  举报