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) ;
}
//…
}