Activity生命周期总结

系统 1883 0

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

 

 

  • Activity生命7方法

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

 

Method

Description

Killable

Next

onCreate

当启动新的 Activity 的时候被调用

No

onStart()

onStart

Activity 对用户即将可见时调用

No

onResume() or onStop()

onRestart

重新启动 Activity 时调用 (此方法是重启留在缓存中的 Activity

No

onStart()

onResume

Activity 界面可与用户交互时调用

No

onPause()

onPause

当系统要启动一个其他的 activity 时调用,用于保存当前数据

Yes

onResume() or onStop()

onStop

Activity 已经不可见时调用

Yes

onRestart() or
onDestroy()

onDestroy

Activity finish 或手机内存不足被销毁的时候调用

Yes

nothing

 

 

 

  • Activity LifeCycle

Google官方提供了Activity LifeCycle的运行图,个人觉得官方提供的图非常简洁明了地介绍了Activity的运行周期:


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));
        }
    }
    
	@Override
	protected 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

Activity生命周期总结


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论