Android四大组件之Activity的生命周期详解
2016-03-30 19:35
761 查看
Android生命周期详解
Activities在系统中管理着一个Activity栈,当有一个新的Activity启动的时候,新的Activity会在栈顶并且变成一个正在运行状态的Activity,之前的Activity一直会存在栈中,当新的Activity一直存在时,之前的Activity不会再一次出现在前台。
Activity有四种重要的状态
1、如果一个Activity在前台屏幕上,那么它就处于运行状态。
2、如果一个Activity失去了焦点,但是在屏幕上仍然可见,那么它此时的状态处于暂停状态(pause)。一个暂停状态的Activity仍然还活着,但是如果当系统中的内存不足的情况下,它会被系统杀死,系统回收它的内存。
3、如果一个Activity完全被另一个Activity覆盖,那么它此时处于停止状态,它仍然保留着全部的状态信息以及成员信息,由于它对用户不再是可见的,所以它的窗口是隐藏的,当其他地方需要内存时候,它经常会系统被kill掉回收它的内存。
4、如果一个Activity是暂停状态或者停止状态,系统会通过调用finish方法回收它的内存,或者简单的杀死他的进程,当它再一次需要向用户展示的时候,它必须启动至它之前的状态。
Activity生命周期方法解析
1、onCreate:当Activity第一次启动的时候被调用,在这个方法里面,一般是做一些初始化工作,例如create views(创建view视图),bind data to lists(给list绑定数据)等等,这个方法还为我们提供了一个带有Activity之前状态的Boudle。它总是跟在onStart方法后面。
2、onRestart:当Activity处于stop状态后调用。总是跟在onStart方法后面。
3、onStart:当Activity对用户可见的时候被调用。如果Activity来自于前台,跟在它后面的是onResume方法,如果Activity变成隐藏,那么跟在他后面的方法是onStop。
4、onResume:当Activity将要启动和用户交互的时候调用,这个时候,你的Activity处于Activity栈的顶端。跟在他后面的方法是onPause。
5、onPause:当系统即将开始恢复以前的活动时调用。通常用于提交未保存更改持久性数据,停止动画和其它可能消耗CPU的事情,等等。此方法的实现必须非常快,因为在方法返回之前,下一个Activity将不恢复。如果这个Activity是从后台返回前台,跟在它后面的方法是onResume,如果它对用户变的不可见,那么跟在它后面的是onStop方法。
6、onStop:当这个Activity不在显示给用户时调用,因为另一个Activity已经被恢复(resumed)并且已经覆盖了它,这可能出现在一个新的Activity正在被启动,或另一个存在的Activity要获得焦点,来到前台界面,又或者这个Activity将要被销毁。跟在它后面的通常有两种方法,如果这个Activity回到前台与用户进行交互,那么就是onRestart方法,如果这个Activity将要被销毁,则它后面的方法就是onDestroy。
7、onDestroy:当这个Activity被销毁的时候调用。
Activity从start到destroy的历程
1、Activity刚启动的时候,调用onCreate,onStart,onResume方法。此时Activity处于前台可见的位置。状态为正在运行(Running)。
2、当前Activity被其他Activity覆盖或者屏幕锁屏,系统会调用onPause方法,暂停当前的Activity执行。
3、当前的Activity由覆盖状态回到前台或者屏幕被解锁,系统会调用onResume方法,使Activity再次进入运行状态。
4、当前的Activity跳转到新的Activity界面或者按Home键回到主屏,在后台运行的时候,系统首先会调用onPause方法,然后调用onStop方法,进入停止状态。
5、用户后退回到此Activity时,系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态
6、当前Activity处于不可见状态,系统内存不足的时候,系统会kill当前Activity,当用户退回当前的Activity,此时会再次调用onCreate方法,onStart方法,onResume方法,进入运行状态。
7、退出当前的Activity,系统首先调用onPause方法,然后调用onStop方法,最后调用onDestroy方法,结束当前的Activity。
Activities在系统中管理着一个Activity栈,当有一个新的Activity启动的时候,新的Activity会在栈顶并且变成一个正在运行状态的Activity,之前的Activity一直会存在栈中,当新的Activity一直存在时,之前的Activity不会再一次出现在前台。
Activity有四种重要的状态
1、如果一个Activity在前台屏幕上,那么它就处于运行状态。
2、如果一个Activity失去了焦点,但是在屏幕上仍然可见,那么它此时的状态处于暂停状态(pause)。一个暂停状态的Activity仍然还活着,但是如果当系统中的内存不足的情况下,它会被系统杀死,系统回收它的内存。
3、如果一个Activity完全被另一个Activity覆盖,那么它此时处于停止状态,它仍然保留着全部的状态信息以及成员信息,由于它对用户不再是可见的,所以它的窗口是隐藏的,当其他地方需要内存时候,它经常会系统被kill掉回收它的内存。
4、如果一个Activity是暂停状态或者停止状态,系统会通过调用finish方法回收它的内存,或者简单的杀死他的进程,当它再一次需要向用户展示的时候,它必须启动至它之前的状态。
Activity生命周期方法解析
1、onCreate:当Activity第一次启动的时候被调用,在这个方法里面,一般是做一些初始化工作,例如create views(创建view视图),bind data to lists(给list绑定数据)等等,这个方法还为我们提供了一个带有Activity之前状态的Boudle。它总是跟在onStart方法后面。
2、onRestart:当Activity处于stop状态后调用。总是跟在onStart方法后面。
3、onStart:当Activity对用户可见的时候被调用。如果Activity来自于前台,跟在它后面的是onResume方法,如果Activity变成隐藏,那么跟在他后面的方法是onStop。
4、onResume:当Activity将要启动和用户交互的时候调用,这个时候,你的Activity处于Activity栈的顶端。跟在他后面的方法是onPause。
5、onPause:当系统即将开始恢复以前的活动时调用。通常用于提交未保存更改持久性数据,停止动画和其它可能消耗CPU的事情,等等。此方法的实现必须非常快,因为在方法返回之前,下一个Activity将不恢复。如果这个Activity是从后台返回前台,跟在它后面的方法是onResume,如果它对用户变的不可见,那么跟在它后面的是onStop方法。
6、onStop:当这个Activity不在显示给用户时调用,因为另一个Activity已经被恢复(resumed)并且已经覆盖了它,这可能出现在一个新的Activity正在被启动,或另一个存在的Activity要获得焦点,来到前台界面,又或者这个Activity将要被销毁。跟在它后面的通常有两种方法,如果这个Activity回到前台与用户进行交互,那么就是onRestart方法,如果这个Activity将要被销毁,则它后面的方法就是onDestroy。
7、onDestroy:当这个Activity被销毁的时候调用。
Activity从start到destroy的历程
1、Activity刚启动的时候,调用onCreate,onStart,onResume方法。此时Activity处于前台可见的位置。状态为正在运行(Running)。
2、当前Activity被其他Activity覆盖或者屏幕锁屏,系统会调用onPause方法,暂停当前的Activity执行。
3、当前的Activity由覆盖状态回到前台或者屏幕被解锁,系统会调用onResume方法,使Activity再次进入运行状态。
4、当前的Activity跳转到新的Activity界面或者按Home键回到主屏,在后台运行的时候,系统首先会调用onPause方法,然后调用onStop方法,进入停止状态。
5、用户后退回到此Activity时,系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态
6、当前Activity处于不可见状态,系统内存不足的时候,系统会kill当前Activity,当用户退回当前的Activity,此时会再次调用onCreate方法,onStart方法,onResume方法,进入运行状态。
7、退出当前的Activity,系统首先调用onPause方法,然后调用onStop方法,最后调用onDestroy方法,结束当前的Activity。
public class MainActivity extends Activity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.btn_jump); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); System.out.println("MainActivity的onCreate已经被调用了啦啦啦"); } @Override protected void onStart() { super.onStart(); System.out.println("MainActivity的onStart已经被调用了啦啦啦"); } @Override protected void onResume() { super.onResume(); System.out.println("MainActivity的onResume已经被调用了啦啦啦"); } @Override protected void onRestart() { super.onRestart(); System.out.println("MainActivity的onRestart已经被调用了啦啦啦"); } @Override protected void onPause() { super.onPause(); System.out.println("MainActivity的onPause已经被调用了啦啦啦"); } @Override protected void onStop() { super.onStop(); System.out.println("MainActivity的onStop已经被调用了啦啦啦"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("MainActivity的onDestroy已经被调用了啦啦啦"); } /* *重写返回键 */ @Override public void onBackPressed() { finish(); }
相关文章推荐
- Android自定义折线图
- Android 反射技术
- 【转】Android studio 导入github工程
- Android小项目:记事本
- Android 5.0 MTK平台下Contacts的Android.mk文件分析
- Android 嵌套ViewPager实现连贯双滑动
- android 屏幕旋转180度
- Android_ondraw()和dispatchdraw()的区别
- 如何让android的service一直在后台运行
- Android4.4隐藏状态栏
- Android跨进程通讯的四种方式
- android日期格式化
- 我们也说说Android.mk(3) - 宏
- android事件分发,拦截,处理
- android 横竖屏切换属性和播放视频全屏切换
- android studio 用 Javacv 读取视频流
- SEAndroid 记录
- $Android制作和使用Nine-Patch图片
- android 4.4 禁止使用power键的休眠功能
- android串口通信实例