Activity生命周期

試著忘記壹切 提交于 2020-03-10 04:58:22

在这里插入图片描述

  • onContentChanged

onContentChanged()是Activity中的一个回调方法 当Activity的布局改动时,即setContentView()或者addContentView()方法执行完毕时就会调用该方法, 例如,Activity中各种View的findViewById()方法都可以放到该方法中。

  • onPostCreate、onPostResume

onPostCreate方法是指onCreate方法彻底执行完毕的回调,onPostResume类似,这两个方法官方说法是一般不会重写,现在知道的做法也就只有在使用ActionBarDrawerToggle的使用在onPostCreate需要在屏幕旋转时候等同步下状态,Google官方提供的一些实例就是如下做法:

@Override
protectedvoidonPostCreate(BundlesavedInstanceState){
super.onPostCreate(savedInstanceState);
//SyncthetogglestateafteronRestoreInstanceStatehasoccurred.mDrawerToggle.syncState();
}
  • onSaveInstanceState
    这个方法地调用和系统版本有关系,系统9.0以下这个方法是在onStop之前调用,在系统9.0及以上是在onStop之后调用

  • 首次启动

2020-03-09 18:21:40.121 8576-8576/com.miracle.myapplication D/wings: onContentChanged: 1
2020-03-09 18:21:40.121 8576-8576/com.miracle.myapplication D/wings: onCreate: 1
2020-03-09 18:21:40.126 8576-8576/com.miracle.myapplication D/wings: onStart: 1
2020-03-09 18:21:40.126 8576-8576/com.miracle.myapplication D/wings: onPostCreate: 1
2020-03-09 18:21:40.128 8576-8576/com.miracle.myapplication D/wings: onResume: 1
2020-03-09 18:21:40.130 8576-8576/com.miracle.myapplication D/wings: onPostResume: 1
  • 按下home 键或者熄屏
2020-03-09 18:27:57.528 8816-8816/com.miracle.myapplication D/wings: onPause: 1
2020-03-09 18:27:57.549 8816-8816/com.miracle.myapplication D/wings: onStop: 1
2020-03-09 18:27:57.554 8816-8816/com.miracle.myapplication D/wings: onSaveInstanceState: 1
  • 再次打开
2020-03-09 18:33:00.540 8964-8964/com.miracle.myapplication D/wings: onRestart: 1
2020-03-09 18:33:00.541 8964-8964/com.miracle.myapplication D/wings: onStart: 1
2020-03-09 18:33:00.541 8964-8964/com.miracle.myapplication D/wings: onResume: 1
2020-03-09 18:33:00.542 8964-8964/com.miracle.myapplication D/wings: onPostResume: 1
  • 按下back键
2020-03-09 18:31:21.983 8964-8964/com.miracle.myapplication D/wings: onPause: 1
2020-03-09 18:31:22.364 8964-8964/com.miracle.myapplication D/wings: onStop: 1
2020-03-09 18:31:22.368 8964-8964/com.miracle.myapplication D/wings: onDestroy: 1
  • 杀掉进程
9.0及以上系统版本
2020-03-09 18:55:55.956 8964-8964/com.miracle.myapplication D/wings: onPause: 1
2020-03-09 18:55:55.968 8964-8964/com.miracle.myapplication D/wings: onStop: 1
2020-03-09 18:55:55.969 8964-8964/com.miracle.myapplication D/wings: onSaveInstanceState: 1
2020-03-09 18:55:58.277 8964-8964/com.miracle.myapplication D/wings: onDestroy: 1
9.0以下版本
2020-03-09 18:57:25.455 27193-27193/com.miracle.myapplication D/wings: onPause: 1
2020-03-09 18:57:25.474 27193-27193/com.miracle.myapplication D/wings: onSaveInstanceState: 1
2020-03-09 18:57:25.475 27193-27193/com.miracle.myapplication D/wings: onStop: 1
  • 屏幕旋转

如果你不做任何配置

2020-03-09 18:39:11.428 25379-25379/com.miracle.myapplication D/wings: onPause: 1
2020-03-09 18:39:11.428 25379-25379/com.miracle.myapplication D/wings: onSaveInstanceState: 1
2020-03-09 18:39:11.429 25379-25379/com.miracle.myapplication D/wings: onStop: 1
2020-03-09 18:39:11.429 25379-25379/com.miracle.myapplication D/wings: onDestroy: 1
2020-03-09 18:39:11.480 25379-25379/com.miracle.myapplication D/wings: onContentChanged: 1
2020-03-09 18:39:11.480 25379-25379/com.miracle.myapplication D/wings: onCreate: 1
2020-03-09 18:39:11.481 25379-25379/com.miracle.myapplication D/wings: onStart: 1
2020-03-09 18:39:11.481 25379-25379/com.miracle.myapplication D/wings: onRestoreInstanceState: 1
2020-03-09 18:39:11.481 25379-25379/com.miracle.myapplication D/wings: onPostCreate: 1
2020-03-09 18:39:11.483 25379-25379/com.miracle.myapplication D/wings: onResume: 1
2020-03-09 18:39:11.484 25379-25379/com.miracle.myapplication D/wings: onPostResume: 1

在AndroidManifest配置文件里声明android:configChanges属性

默认屏幕旋转会重新创建,当然可以通过在配置文件里加上如下代码:

android:configChanges=“keyboardHidden|orientation|screenSize”(sdk>13时需加上screenSize)

这个时候再旋转屏幕便不会销毁Activity,这时候再旋转屏幕可以看到只会执行onConfigurationChanged方法,有什么在屏幕旋转的逻辑可以重写这个方法:

publicvoidonConfigurationChanged(ConfigurationnewConfig){
if(newConfig.orientation==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
//TODO:}
super.onConfigurationChanged(newConfig);
}
  • FirstActivity打开SecondActivity
2020-03-09 18:51:43.762 26757-26757/com.miracle.myapplication D/wings: onPause: 1
2020-03-09 18:51:43.794 26757-26757/com.miracle.myapplication D/wings: onContentChanged: 2
2020-03-09 18:51:43.794 26757-26757/com.miracle.myapplication D/wings: onCreate: 2
2020-03-09 18:51:43.794 26757-26757/com.miracle.myapplication D/wings: onStart: 2
2020-03-09 18:51:43.795 26757-26757/com.miracle.myapplication D/wings: onPostCreate: 2
2020-03-09 18:51:43.797 26757-26757/com.miracle.myapplication D/wings: onResume: 2
2020-03-09 18:51:43.797 26757-26757/com.miracle.myapplication D/wings: onPostResume: 2
2020-03-09 18:51:44.195 26757-26757/com.miracle.myapplication D/wings: onSaveInstanceState: 1
2020-03-09 18:51:44.198 26757-26757/com.miracle.myapplication D/wings: onStop: 1
  • SecondActivity按下back键回到FirstActivity
2020-03-09 18:53:35.417 26757-26757/com.miracle.myapplication D/wings: onPause: 2
2020-03-09 18:53:35.465 26757-26757/com.miracle.myapplication D/wings: onRestart: 1
2020-03-09 18:53:35.467 26757-26757/com.miracle.myapplication D/wings: onStart: 1
2020-03-09 18:53:35.468 26757-26757/com.miracle.myapplication D/wings: onResume: 1
2020-03-09 18:53:35.468 26757-26757/com.miracle.myapplication D/wings: onPostResume: 1
2020-03-09 18:53:35.778 26757-26757/com.miracle.myapplication D/wings: onStop: 2
2020-03-09 18:53:35.779 26757-26757/com.miracle.myapplication D/wings: onDestroy: 2

正常情况下FirstActivity会执行: onRestart -> onStart -> onResume

当系统由于要回收内存而把 activity 销毁时

Activity在onPause或者onStop状态下都有可能遇到由于突发事件系统需要回收内存,之后的onDestroy方法便不会再执行,这时候会执行: onCreate –> onStart –> onRestoreInstanceState –> onResume

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!