AndroidActivity生命周期研究
Posted 星辰大海001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AndroidActivity生命周期研究相关的知识,希望对你有一定的参考价值。
1. 为什么研究Activity什么周期
- Activity是android四大组件之一,是Android人必须要深刻理解的基础内容之一。
- 可以提高我们对相关问题的解决能力。
- 对一个问题如果不能深入理解,总觉得不踏实。
2. Activity生命周期详解
2.1 Activity生命周期图解
下图是Android开发官网的原图,清晰表达了Activity生命周期中每个方法所处位置及调用流程。
上图对Activity的执行流程表达很到位,但是对每个方法在执行时,我们的设备处于一种什么状态,其中注释表达的不是很细致,有待进一步深入研究。
2.2 Activity生命周期核心方法详解
下表是Android官网对Activity生命周期中各个方法的详解。
注:通过上面表格中的信息描述我们不难发现一下几点:
- 当Activity调用完onResume()方法后Activity就将处于可见状态,可以与用户交互了。
- onStop()方法是在Activity完全不可见时才调用的。
- 当调用完onPause()方法后Activity是可以被杀掉的,这也就意味着可能不会调用 onStop()和 onDestroy()。因此,您应该在调用 onPause()向存储设备写入至关重要的持久性数据(例如用户编辑)。
- 应该对 onPause()调用期间必须保留的信息有所选择,因为该方法中的任何阻止过程都会妨碍向下一个 Activity 的转变并拖慢用户体验。
3. 通过一个生命周期实例来加深一下印象
3.1 实例代码
有两个Activity,MainActivity和TwoActivity,其代码如下,后面将执行几个常见的操作,看看其生命周期流程究竟如何运行。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_onClick).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, TwoActivity.class)); } }); Log.i("info", "MainActivity --> onCreate()"); } @Override protected void onStart() { super.onStart(); Log.i("info", "MainActivity --> onStart()"); } @Override protected void onResume() { super.onResume(); Log.i("info", "MainActivity --> onResume()"); } @Override protected void onRestart() { super.onRestart(); Log.i("info", "MainActivity --> onRestart()"); } @Override protected void onPause() { super.onPause(); Log.i("info", "MainActivity --> onPause()"); } @Override protected void onStop() { super.onStop(); Log.i("info", "MainActivity --> onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("info", "MainActivity --> onDestroy()"); } }
public class TwoActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two_layout); Log.i("info", "TwoActivity --> onCreate()"); } @Override protected void onStart() { super.onStart(); Log.i("info", "TwoActivity --> onStart()"); } @Override protected void onRestart() { super.onRestart(); Log.i("info", "TwoActivity --> onRestart()"); } @Override protected void onResume() { super.onResume(); Log.i("info", "TwoActivity --> onResume()"); } @Override protected void onPause() { super.onPause(); Log.i("info", "TwoActivity --> onPause()"); } @Override protected void onStop() { super.onStop(); Log.i("info", "TwoActivity --> onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("info", "TwoActivity --> onDestroy()"); } }
3.2 启动MainActivity
结果预测:
MainActivity --> onCreate()
MainActivity --> onStart()
MainActivity --> onResume()
真实结果:
果然一致。
3.3 MainActivity到TwoActivity
结果预测:
MainActivity –> onPause()
TwoActivity –> onCreate()
TwoActivity –> onStart()
TwoActivity –> onResume()
MainActivity –> onStop()
真实结果:
和预测顺序一致。
3.4 从TwoActivity返回到MainActivity
结果预测:
TwoAcitvity –> onPause()
MainActivity –> onRestart()
MainActivity –> onStrat()
MainActivity –> onResume()
TwoActivity –> onStop()
TwoActivity –> onDestroy()
真实结果:
顺序一致,证明理论是正确的。
3.5 从MainActivity返回桌面
结果预测:
MainActivity –> onPause()
MainActivity –> onStop()
MainActivity –> onDestroy()
真实结果:
以上是关于AndroidActivity生命周期研究的主要内容,如果未能解决你的问题,请参考以下文章
React Native 中的 Android Activity 生命周期 - ViewPager