Activity的生命周期
Posted Denluoyia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity的生命周期相关的知识,希望对你有一定的参考价值。
概述: 四大组件之一的Activity组件,在应用中一个Activity可以用来表示一个界面,我们通常可以理解成“活动”,即一个活动开始,代表Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动。Activity的生命周期交给系统统一管理。
先来看千年离不开的Activity生命周期图:
在Android中,Activity拥有三个基本状态:
- Resumed: 一个新Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
- Paused: 当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但是它失去了焦点,不可与用户交互。
- Stopped: 当Activity被另外一个Activity覆盖,失去焦点并不可见时处于Stopped状态。
1 public class MainActivity extends Activity { 2 public static final String tag = "MainActivity的生命周期测试---"; 3 private Button button; 4 //Activity创建时被调用 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 Log.i(tag, "onCreate"); 10 button = (Button) findViewById(R.id.button); 12 button.setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 //点击button跳转到Main2Activity界面,Main2Activity在配置文件中设置为透明属性 16 Intent intent = new Intent(MainActivity.this, Main2Activity.class); 17 startActivity(intent); 18 } 19 }); 20 } 21 22 //Activity重新可见时被调用,接着会调用onStart() 23 @Override 24 protected void onRestart() { 25 super.onRestart(); 26 Log.i(tag, "onRestart"); 27 } 28 29 //Activity可见时被调用 30 @Override 31 protected void onStart() { 32 super.onStart(); 33 Log.i(tag, "onStart"); 34 } 35 36 //Activity获得焦点,可以进行交互时被调用;处于前台状态 37 @Override 38 protected void onResume() { 39 super.onResume(); 40 Log.i(tag, "onResume"); 41 } 42 43 //Activity失去焦点,但是可见(在其他应用需要内存时可能会被kill掉),此状态可以转为前台onResume() 44 @Override 45 protected void onPause() { 46 super.onPause(); 47 Log.i(tag, "onPause"); 48 } 49 50 //Activity完全不可见时被调用(可能会被系统kill掉);例如返回到此状态时,如果没有被kill那么就会调用onReStart() 51 @Override 52 protected void onStop() { 53 super.onStop(); 54 Log.i(tag, "onStop"); 55 } 56 //Activity被销毁时被调用 57 @Override 58 protected void onDestroy() { 59 super.onDestroy(); 60 Log.i(tag, "onDestroy"); 61 } 62 }
设置Main2Activity为透明:
<activity android:theme="@android:style/Theme.Translucent" android:name=".Main2Activity" android:label="@string/title_activity_main2" > </activity>
结论:
- 启动Activity, onCreate()->onStart()->onResume(), Activity处于运行状态(Resumed状态)
-
10-21 21:00:14.859 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onCreate
10-21 21:00:14.859 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onStart
10-21 21:00:14.859 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onResume
- 接下来点击button, 跳转到Main2Activitytou透明界面中,处于onPaused状态
-
10-21 21:00:36.256 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onPause
- 从Main2Activitytou返回,则MainActivity的主界面又处于运行状态(Resumed状态)[注意: 但也有可能由于系统内存不足,杀死了这个后台状态的Activity(此时这个Activity引用仍在任务栈中,只是这时候引用指向的对象为null),若再次回到这个Activity则会经过: onCreate() -> onStart() -> onResume() ]。
-
10-21 21:01:13.813 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onResume
- Activity退居后台时,即是当Activity转到新的Activity界面(不透明或是Dialog属性),按Home键回到主屏或这是锁屏: onPause -> onStop(), 进入停滞状态 (Stopped状态)
-
10-21 21:01:47.057 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onPause
10-21 21:01:47.127 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onStop
- 再次回居前台:onRestart() -> onStart() -> onResume(),再次回到运行状态;[注意: 但也有可能由于系统内存不足,杀死了这个后台状态的Activity(此时这个Activity引用仍在任务栈中,只是这时候引用指向的对象为null),若再次回到这个Activity则会经过: onCreate() -> onStart() -> onResume() ]。
-
10-21 21:02:02.274 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onRestart
10-21 21:02:02.277 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onStart
10-21 21:02:02.387 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onResume
- 从运行状态点击返回键时,任务栈没有Activity,也就是程序退出了:onPause() -> onStop() -> onDestory()
-
10-21 21:02:28.791 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onPause 10-21 21:02:29.221 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onStop 10-21 21:02:29.221 28836-28836/com.example.lenovo.activitydemo I/MainActivity的生命周期测试---﹕ onDestroy
锁屏: onPause() -> onStop()
解锁: onRestart() -> onStart() -> onResume()
以上是关于Activity的生命周期的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fragment 和 Activity 执行生命周期流程的问题
React Native 中的 Android Activity 生命周期 - ViewPager