读书人

Activity生命周期小结

发布时间: 2012-07-27 11:03:01 作者: rapoo

Activity生命周期总结

Android中用于显示的容器是Activity,一个Activity对应一个显示页面。

?

?

Activity生命7方法

Activity对象运行与它自己的7个方法密切相关,从对象的创建到销毁,这7个方法在Activity不同阶段运行,具体的方法介绍如下表格所示:

?

如上图所示,当启动Activity1时,首先调用onCreate方法初始化Activity的内容,当Activity显示出来的时候调用onStar方法(此时Activity只能看不能点击使用),当Activity可以被点击时,则调用onResume方法;

如果新一个Activity2完全覆盖原Activity1,首先会让Activity1执行onPause方法暂存Activity1的数据,然后依次执行onCreate、onStart、onResume方法启动Activity2,最后因为Activity1会被Activity2完全覆盖,所以会执行Activity1的onStop方法;

另一种情况,如果新Activity2未完全覆盖Activity1(可能只是一个弹出层),则运行流程与上面说的执行流程相同,只是不会执行Activity1的onStop方法;

如果点击手机上的“返回”按钮,当前Activity对象会被销毁,此时就会执行onDestory方法。

?

?

Android的Task

Android的Task是一个Activity栈,保存的是所有正运行的application的Activity数据,Task中的Activity可以分属于不同的application,一个Activity栈也可能是由一个或多个Task组成,Task数据仅仅是临时保存,若手机内存不足或长时间未使用该application,Android会自动销毁Task部分Activity数据。

?

onSaveInstanceState保存数据前面提到:Activity处于onPause、onStop和onDestory状态时,如果手机内存资源紧缺就会销毁Activity,这样导致当前Activity填写的数据都化为乌有。Activity含有onSaveInstanceState方法,该方法的参数Bundle可以保存数据,即使当前Activity被销毁,Bundle也是存在的。这样Activity再次启动后onCreate方法的参数Bundle对象其实就是onSaveInstanceState的Bundle对象,所以可以在onCreate方法中再取出Bundle对象中的数据。
 @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                if(savedInstanceState!=null && savedInstanceState.containsKey(ET_KEY)){        EditText et = (EditText)findViewById(R.id.et);        et.setText(savedInstanceState.getString(ET_KEY));        }    }    @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);EditText et = (EditText)findViewById(R.id.et);outState.putString(ET_KEY, et.getText().toString());}
?

?

我的百度文库有关于Android Activity生命周期的ppt,免费下载,希望对大家有所帮助:

http://wenku.baidu.com/view/db19524ce518964bcf847cf9.html

?

附Activity生命周期例子,版本2.1

读书人网 >移动开发

热点推荐