Activity的生命周期

Activity生命周期,Activity被部署到安卓应用之后,跟随应用运行,会在不同的状态间进行切换,并且在切换状态的同时会回调不同的方法,这种状态叫生命周期

活动有四种状态:运行状态、暂停状态、停止状态、销毁状态


onCreate:在活动第一次被创建的时候调用,在这个方法中应完成初始化操作,比如加载布局绑定事件

onStart:在活动由不可见变为可见时调用

onResume:在活动准备好与用户交互的时候调用,此时活动一定位于返回栈的栈顶

onPause:在系统准备去启动或者恢复另一个活动的时候调用,在此方法中将消耗的CPU资源释放,这个方法执行速度一定要快,否则会影响到新的栈顶活动的使用

onStop:在活动完全不可见时调用,与onPause的区别:若启动的新活动是一个对话框式的活动,onPause会调用,而onStop不会

onDestory:在活动被销毁前调用,之后活动变为销毁状态

onRestart:活动被重新启动时调用

public class LifeCycleActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_life_cycle);
        Log.d("lifeCycle","---onCreate---"); //在日志中输出
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("lifeCycle","---onStart---");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("lifeCycle","---onResume---");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("lifeCycle","---onRause---");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("lifeCycle","---onStop---");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("lifeCycle","---onRestart---");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("lifeCycle","---onDestory---");
    }
}

打开该Activity时Logcat中显示

04-28 08:42:40.974 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onCreate---
04-28 08:42:40.978 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onStart---

04-28 08:42:40.979 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onResume---

说明只调用了onCreate、onStart、onResume。

点击返回键时Logcat中显示

04-28 09:01:12.895 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onRause---
04-28 09:01:13.243 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onStop---
    ---onDestory---

onResume:当离开该应用返回时将会调用

点击home键回到后台时Logcat显示

04-28 09:15:28.360 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onRause---

04-28 09:15:28.391 24084-24084/com.wangkangli.activitystudy D/lifeCycle: ---onStop---

活动被回收了怎么办?

应用中有一个活动A,用户在活动A的基础上启动了活动B,A进入了停止状态,而这个时候系统内存足回收了活动A,当用户按下Back返回活动A时并不会执行onRestart,而是执行onCreate,因为活动会被重新创建。但当你再打开时当时的临时数据都会小事,这种情况会严重影响用户体验!

Activity中提供了一个onSaveInstanceState()回调方法,这个方法在活动回收前一定会被调用,因此我们使用这个方法解决此问题

onSaveInstanceState()携带一个Bundle类型参数,其提供一系列方法保存数据,比如putString()保存字符串等等

@0verride 
protected void onSaveInstanceState(Bundle outState) {  
	super. onSaveInstanceState (outState) ; 
	String tempData = “Something you just typed”;
	outState.putString ("data_key”,tempData);
}
由此进行数据保存,改写onCreate方法
@0verride 
protected void onCreate(Bundle savedInstanceState) {  
	super. onCreate(savedInstanceState);
	Log.d(TAG, "onCreate“ );
	setContentView(R.layout.activity_main);
	if (savedInstanceState!= null) { 
		String tempData=savedInstanceState.getString("data_key");
		Log.d(TAG, tempData) ;
	}
//…
}

猜你喜欢

转载自blog.csdn.net/castanea/article/details/80136408