Activity生命周期小知识
2016-09-23 22:41
169 查看
Activity生命周期图
onCreate()方法在Activity创建的时候调用,onStart()方法在启动时被调用,onResume()方法在onStart()方法完成后调用,onPause()方法在Activity暂停时被调用,onStop()方法在Activity停止时被调用,onRestart()方法在重新启动Activity是调用,onDestroy()方法在销毁Activity时调用。
假如在onCreate()方法中使用startActivity()时,俩个Activity的生命周期如何变化呢?(听别人说的他在面试时面试官问的问题)
首先给个代码
第一个Activity:
public class demo extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("1.onCreate()执行了"); setContentView(R.layout.activity_demo); startActivity(new Intent(demo.this,nextActivity.class)); System.out.println("startActivity()下边的语句执行了"); } @Override protected void onStart() { super.onStart(); System.out.println("1.onStart()执行了"); } @Override protected void onResume() { super.onResume(); System.out.println("1.onResume()执行了"); } @Override protected void onPause() { super.onPause(); System.out.println("1.onPause()执行了"); } @Override protected void onStop() { super.onStop(); System.out.println("1.onStop()执行了"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("1.onDestroy()执行了"); } @Override protected void onRestart() { super.onRestart(); System.out.println("1.onRestart()执行了"); } }
第二个Activity:
public class nextActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_next); System.out.println("2.onCreate()执行了"); } @Override protected void onStart() { super.onStart(); System.out.println("2.onStart()执行了"); } @Override protected void onResume() { super.onResume(); System.out.println("2.onResume()执行了"); } @Override protected void onPause() { super.onPause(); System.out.println("2.onPause()执行了"); } @Override protected void onStop() { super.onStop(); System.out.println("2.onStop()执行了"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("2.onDestroy()执行了"); } @Override protected void onRestart() { super.onRestart(); System.out.println("2.onRestart()执行了"); } }
运行结果:
09-23 23:03:55.801 28257-28257/com.example.administrator.demo I/System.out: 1.onCreate()执行了
09-23 23:03:56.017 28257-28257/com.example.administrator.demo I/System.out: startActivity()下边的语句执行了
09-23 23:03:56.021 28257-28257/com.example.administrator.demo I/System.out: 1.onStart()执行了
09-23 23:03:56.021 28257-28257/com.example.administrator.demo I/System.out: 1.onResume()执行了
09-23 23:03:56.041 28257-28257/com.example.administrator.demo I/System.out: 1.onPause()执行了
09-23 23:03:56.141 28257-28257/com.example.administrator.demo I/System.out: 2.onCreate()执行了
09-23 23:03:56.141 28257-28257/com.example.administrator.demo I/System.out: 2.onStart()执行了
09-23 23:03:56.141 28257-28257/com.example.administrator.demo I/System.out: 2.onResume()执行了
09-23 23:03:57.005 28257-28257/com.example.administrator.demo I/System.out: 1.onStop()执行了
由结果可以看出首先执行onCreate()执行到startActivity()时并未直接执行另一个Activity,而是沿着生命周期执行,在执行onResume()后第二个Activity才执行,当第二个Activity可见时,此时调用onStop().
每当一个新的activity被启动,那么之前的将被停止。但系统将会把它压入一个栈(“back stack”即后退栈),当一个新的activity启动,它将被 放到栈顶并获得用户焦点。后台栈遵循后进先出的栈机制。所以当用户完成当前页面并按下返回按钮时,它将被pop出栈(并销毁),之前的activity将被恢复。
点击返回键时运行结果:
09-23 23:15:14.149 28257-28257/com.example.administrator.demo I/System.out: 2.onPause()执行了
09-23 23:15:14.153 28257-28257/com.example.administrator.demo I/System.out: 1.onRestart()执行了
09-23 23:15:14.153 28257-28257/com.example.administrator.demo I/System.out: 1.onStart()执行了
09-23 23:15:14.153 28257-28257/com.example.administrator.demo I/System.out: 1.onResume()执行了
09-23 23:15:14.901 28257-28257/com.example.administrator.demo I/System.out: 2.onStop()执行了
09-23 23:15:14.901 28257-28257/com.example.administrator.demo I/System.out: 2.onDestroy()执行了
由此可以看出当切换Activity时总是在当前Activity执行onPause()后才执行切换后的Activity相关代码,在当前的Activity可见时且已获得焦点是才去执行之前Activity的onStop()操作。为何如此呢?看官方解释
官方onStop()方法Called when the activity is no longer visible to the user, because another activity has been resumed and is covering this
one. This may happen either because a new activity is being started, an existing one is being brought in front of this one, or this one is being destroyed.
Followed by either
onRestart()if this activity is coming back to interact with the user, or
onDestroy()if
this activity is going away.
当activity不再对用户可见时调用。原因可能是它即将被销毁、或者其它activity(已有或新建的)被恢复运行并要覆盖本activity。
如果activity还会回来与用户交互,则下一个回调方法是onRestart();如果这个activity即将消失,则下一个回调方法是onDestroy()
看这句话其它activity(已有或新建的)被恢复运行并要覆盖本activity,因为上一个要求覆盖当前Activity时才会调用onStop()。
相关文章推荐
- 基础知识记录:Activity生命周期与Fragment生命周期
- Android 基础知识---Activity生命周期
- 回顾基础知识--第一章:Activity的生命周期和启动模式
- Android Activity学习 <一> Activity基础知识和生命周期
- Activity生命周期与启动模式基础知识备忘录
- 基础知识:Activity的生命周期
- Android基础知识:Activity生命周期和Intent用法
- android基础知识复习(一)——对话框风格的Activity、Menu、Activity生命周期
- Android基础知识之四大组件Activity(二)一个Activity的生命周期?
- Android基础知识之四大组件Activity(三)多个Activity交互的生命周期与设计思想
- android基础知识---ActivityLifecycleCallbacks监听Activity们的生命周期
- [Android知识体系]之四大组件:activity(生命周期管理)
- 基础知识记录:Activity的生命周期
- Android基础知识三(Activity生命周期)
- 基础总结篇之一:Activity生命周期
- Activity生命周期
- [转]基础总结篇之一:Activity生命周期
- Android Activity的生命周期
- Activity的生命周期
- Android Activity生命周期中的7个阶段