网络上关于Activity的详解很多,当然最权威的莫过于Google官方解释http://developer.android.com/guide/components/activities.html 由于天朝早已将Google拒绝门外,所以要访问Google官网需自备梯子,这里给大家推荐红杏 http://honx.in/i/VHsfN4IaAxACnV4S通过此链接注册你我的账号都会增加10天的使用时长哦!在此推荐一下个人独立博客网站http://www.fengchaokm.com/欢迎大家指点。好了,先来一发官方图解:
从官方的图解可以看出,Activity从启动到销毁涉及的主要方法的执行顺序如下:
onCreate()–>onStart()–>onResume()–>onPause()–>onStop()–>onDestroy()
当然Activity生命周期涉及的方法不止这些,下面我们从实例讲解完整的Activity生命周期涉及的方法及过程。
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate--------");
setContentView(R.layout.activity_main);
}
@Override
public void onContentChanged() {
super.onContentChanged();
Log.d(TAG, "onContentChanged--------");
}
public void onStart() {
super.onStart();
Log.d(TAG, "onStart--------");
}
public void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart--------");
}
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
Log.d(TAG, "onPostCreate--------");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume--------");
}
public void onPostResume() {
super.onPostResume();
Log.d(TAG, "onPostResume--------");
}
public void onPause() {
super.onPause();
Log.d(TAG, "onPause--------");
}
public void onStop() {
super.onStop();
Log.d(TAG, "onStop--------");
}
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy--------");
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, "onConfigurationChanged--------");
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(TAG, "onSaveInstanceState--------");
}
public void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
Log.d(TAG, "onRestoreInstanceState--------");
}
}
启动Activity然后退出,相应的执行顺序如下图所示:
下面我们来解释一下Activity生命周期过程:
1、当第一次调用Activity时会执行onCreate()方法,然后当Activity处于可见状态时会执行onStart()方法,接着Activity得到用户焦点时会调用onResume()方法,此时进入run运行状态。
2、如果当前Activity被其他Activity覆盖或被锁屏则会调用onPause()方法,暂定当前Activity的执行;当Activity由被覆盖状态回到最前端或解锁屏则会调用onResume()方法,再次进入运行状态。
3、当前Activity跳转到新的Activity界面或按Home键回到主屏,Activity处于不可见状态则会调用onStop()方法,如果用户回退到此Activity则会先调用onRestart()方法,然后调用onStart()方法,最后调用onResume()方法再次进入运行状态。
4、当用户退出当前Activity时,系统先调用onPuse()方法,然后调用onStop()方法,最后调用onDestory()方法,销毁当前Activity。
5、onContentChanged()是Activity中的一个回调方法 当Activity的布局改动时,即setContentView()或者addContentView()方法执行完毕时就会调用该方法, 例如,Activity中各种View的findViewById()方法都可以放到该方法中。
6、onPause()是在整个窗口被半遮盖或者半透明的时候会执行,而onStop()则是在整个窗口被完全遮盖才会触发, 触发onStop()的方法之前必定会触发onPause()方法。
7、onPostCreate()方法是指onCreate()方法彻底执行完毕的回调,onPostResume()类似,关于这两个方法我也没深入了解,感兴趣的同学可以查找更详细的资料学习。
8、Activity在onPause或者onStop状态下都有可能遇到由于突发事件系统内存不足需要回收内存,之后的onDestroy方法便不会再执行。
横竖屏切换时候Activity的生命周期
1、不设置Activity的android:configChanges时,切换屏会重新调用各个生命周期,默认先销毁当前Activity,然后重新加载。
onPuse()–>onStop()–>onDestory()–>onCreate()–>onStart()–>onResume()
2、当设置Activity的android:configChanges=”orientation|keyboardHidden”时,切换屏不会重新调用各个生命周期,只会执行onConfigurationChanged()方法。