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