须知少年凌云志,曾许人间第一流。这篇文章主要讲述AndroidActivity生命周期研究相关的知识,希望能为你提供帮助。
1. 为什么研究Activity什么周期
- Activity是android四大组件之一,是Android人必须要深刻理解的基础内容之一。
- 可以提高我们对相关问题的解决能力。
- 对一个问题如果不能深入理解,总觉得不踏实。
下图是Android开发官网的原图,清晰表达了Activity生命周期中每个方法所处位置及调用流程。
【AndroidActivity生命周期研究】
文章图片
上图对Activity的执行流程表达很到位,但是对每个方法在执行时,我们的设备处于一种什么状态,其中注释表达的不是很细致,有待进一步深入研究。
2.2 Activity生命周期核心方法详解
下表是Android官网对Activity生命周期中各个方法的详解。
文章图片
注:通过上面表格中的信息描述我们不难发现一下几点:
- 当Activity调用完onResume()方法后Activity就将处于可见状态,可以与用户交互了。
- onStop()方法是在Activity完全不可见时才调用的。
- 当调用完onPause()方法后Activity是可以被杀掉的,这也就意味着可能不会调用 onStop()和 onDestroy()。因此,您应该在调用 onPause()向存储设备写入至关重要的持久性数据(例如用户编辑)。
- 应该对 onPause()调用期间必须保留的信息有所选择,因为该方法中的任何阻止过程都会妨碍向下一个 Activity 的转变并拖慢用户体验。
有两个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()
文章图片
推荐阅读
- Android实现多语言so easy
- MyApp
- 浅析$watch ,$apply 和 $digest (Angular篇)
- 我的Android手册
- 安卓初次完美调试,并成功编程!
- Android系统启动流程解析init进程启动过程
- Android中实现OkHttp上传文件到服务器并带进度
- 安卓延时执行代码
- Unity20172.0 Android平台打包