activity生命周期方法调用过程
?
Activity为Android4大组件之一。Activity作为Android的表现层(presentation layer),每个屏幕都是一个Activity(或由Activity继承而来),在Activity中使用View去构建图形化界面来展现信息和对用户的操作进行响应。
????? 为了保护用户体验和对资源进行管理,需要理解Activity的生命周期。Activity的生命周期不是由Android Application来管理,而是由Android Runtime来管理。Activity的状态由其所在Activity Stack(该栈为后进先出栈)中的位置决定,在栈顶(即最后进栈)的Activity的状态是活动的(Active)。Activity的状态有4种:
Activity的生命周期:
?

?
public class MyActivityCircle extends Activity {private static final int MENU_QUIT = Menu.FIRST; /** 当Activity第一次启动时调用(或被销毁后再次启动时也会被调用) */ @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); } /** 在不可见后再次可见的开始时调用 */ protected void onRestart() { super.onRestart(); } /** 在Visible Lifecycle开始时调用 */ protected void onStart() { super.onStart(); } /** 在onStart()之后调用(但调用是有条件的,不是每次onStart之后都调用) */ protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } /** 在onRestoreInstanceState()之后调用,该方法主要是供系统作最后的初始化使用,一般不重写 */ protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); } /** 在Active Lifecycle开始时调用 */ protected void onResume() { super.onResume(); } /** 在onResume()之后调用,该方法主要是供系统在resume后作最后的构建使用,一般不重写 */ protected void onPostResume() { super.onPostResume(); } /** 在Active Lifecycle结束时(在onPause()前)调用,用于保存UI状态和数据 */ protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); }/** 在Active Lifecycle结束时调用 */ protected void onPause() { super.onPause(); } /** 在Visible Lifecycle结束时调用 */ protected void onStop() { super.onStop(); } /** 在Full Lifetime结束时调用 */ protected void onDestroy() { Log.i(TAG, "onDestroy"); textEdit = null; super.onDestroy(); } /** 在Activity退出时调用 */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } /** 在按MENU键时调用 */ public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, MENU_QUIT, Menu.NONE, "Quit"); return true; } /** 选Option Menu的菜单项时调用 */ public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch(item.getItemId()) { case MENU_QUIT: finish(); break; } return true; } /** 创建Activity的对话框时调用 */ protected Dialog onCreateDialog(int id) { return super.onCreateDialog(id); } /** 显示Dialog前调用 */ protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(); } /** 显示Dialog时调用 */ public final void showDialog(int id) { super.showDialog(); }}?补充:
各方法调用测试结果如下:
?
1.正常启动时:onCreateonStartonPostCreateonResumeonPostResume注意:a.如果启动的activity是因为系统资源不足被系统结束的activity,则会调用onRestoreInstanceState()方法2.正常启动后按“返回键”返回(相当于关闭了,系统会调用onBackPressed()和finish()):onBackPressed()finish()onPauseonStoponDestroy3.从当前activity通过startActivity()启动另一个activity:当前的activityonSaveIntanceState()onPause新启动的activityonCreateonStartonPostCreateonReaumeonPostResume当前的activityonstop4.从当前的activity返回(返回键)上一个仍然存在存在的activity当前的activityonBackPressedonfinishonPause上一个存在的activityonRestartonstartonResumeonPostResume当前的activityonstopondestory 5.用finish结束当前的activity,如果还存在上一个activity当前的activityonfinishonPause上一个存在的activityonRestartonstartonResumeonPostResume当前的activityonstopondestory 6.用finish结束当前的activity,如果不存在上一个activity(当前的activity是第一个启动的)当前的activityonfinishonPauseonstopondestory7.正常启动后按Home键onSaveInstanceStateonPauseonStop8.按Home键后再双击应用进入或者长按home键选择该activity(如果该activity没有被系统因为资源匮乏而销毁时)onRestartonStartonResumeonPostResume9.正常启动后切换为横屏:onSaveInstanceStateonPauseonStoponDestroyonCreateonStartonRestoreInstanceStateonPostCreateonResumeonPostResume10.屏幕待机(黑掉或者按电源键关闭屏幕)onPause11.屏幕变亮onResumeonPostResume*******************************************************************