一切皆有生命。-----箴言-----
1. Activity生命周期图解:
作为与用户交互的桥梁,从生到灭,Activity有自己的生命周期,相信对下面这张图都不陌生。这张图详细而直观得表现了Activity各生命周期间的关系。
图解:
onCreate():
创建,这是Activity生命周期的第一个方法,也是我们在android开发中接触的最多的生命周期方法。
当点击activity的时候,系统会调用activity的oncreate()方法,在这个方法中,会初始化当前布局setContentLayout()方法。
onStart():
这是Activity生命周期的第二个方法。在onCreate()之后被调用,此时Activity已经可见了,但是还没出现在前台,我们还看不到,无法与Activity交互。
onResume():
在onStart()之后被调用,Resume表示继续、重新开始,这名字和它的职责也相同。此时,Activity在这个阶段已经出现在前台并且可见了。当前activity状态属于运行状态 (Running),可与用户进行交互。
onPouse():
暂停,当另外一个activity覆盖当前的acitivty时,此时当前activity会进入到onPouse()方法中,当前activity是可见的,但不能与用户交互状态。
onStop():
停止,此时Activity已经不可见了,但是Activity对象还在内存中,没有被销毁。
在系统内存紧张的情况下,有可能会被系统进行回收。所以一般在当前方法可做资源回收。
onDestory()
销毁,这个阶段Activity被销毁,activity不可见,我们可以将还没释放的资源释放,以及进行一些回收工作。
onRestart()
重新开始,Activity在这时可见,当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法。调用顺序onPouse()->onStop()->onRestart()->onStart()->onResume()。
Activity生命周期打印:
代码:
//打印生命周期log
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
FrameLayout viewContent;
protected TextView tvTitle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTitle = findViewById(R.id.title_Textview);
viewContent= (FrameLayout) findViewById(R.id.viewContent);
}
@Override
protected void onStart() {
Log.i(TAG, "onStart");
super.onStart();
}
@Override
protected void onResume() {
Log.i(TAG, "onResume");
super.onResume();
}
@Override
protected void onPause() {
Log.i(TAG, "onPause");
super.onPause();
}
@Override
protected void onStop() {
Log.i(TAG, "onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy");
super.onDestroy();
}
@Override
protected void onRestart() {
Log.i(TAG, "onRestart");
super.onRestart();
}
protected void setTitle(String title){
if (!TextUtils.isEmpty(title)){
tvTitle.setText(title);
}
}
}
当两个Activity切换时各自的生命周期:
ActivityA:onCreate()->onStart()->onResume()->onPouse()
ActivityB:onCreate()->onStart()->onResume()
ActivityA:onStop()->onDestory()
当ActivityA切换ActivityB(此activity是以dialog形式存在的)所执行的方法:
ActivityA:onCreate()->onStart()->onResume()->onPouse()
ActivityB:onCreate()->onStart()->onResume()