Android:正常情况下的Activity的生命周期
2016-06-18 17:00
363 查看
前言:
Activity的生命周期分为两部分:
- 正常情况下的生命周期;
- 异常情况下的生命周期:Activity被系统回收或者由于设备的配置发生改变从而导致Activity被销毁重建;
这里有三个生命周期比较关键:
完整生命周期:从最初调用onCreate(Bundle)到最终调用onDestroy();Activity会在onCreate()进行所有“全局”状态的设置,在onDestroy()中释放所有持有的资源。比如,调用setContentView去加载界面布局资源,初始化Activity所需的数据等。
可见生命周期:从activity调用onStart()开始,到调用对应的onStop()为止;在这段时间内用户可以在屏幕上看到这个activity,尽管并不一定是在前台也不一定可以和用户交互。在这两个方法之间你可以维护那些activity在用户显示时所需的资源。随着用户的操作或设备屏幕的点亮或熄灭,这两个方法可能会被调用多次。举个例子来说,你可以在onStart()中注册一个IntentReceiver来监控那些可以对你的UI产生影响的环境改变,当你的UI不继续在用户面前显示时你可以在onStop()中注销这个IntentReceiver。每当activity在用户面前显示或者隐藏时都会调用相应的方法,所以onStart()和onStop()方法在整个生命周期中可以多次被调用。
可操作生命周期:从activity调用onResume()开始,到调用对应的onPause()为止;这段时间activity处于其他所有activity的前面,且与用户交互。一个activity可以经常在resumed和paused状态之间转换——例如手机进入休眠时(设备屏幕的点亮和熄灭)、activity的结果返回时、新的intent到来时——所以这两个方法中的代码应该非常的简短。
onRestart():表示Activity正在被重新启动,一般情况下,当前Activity从不可见变为可见,onRestart()就会被调用。这一般是用户操作导致的,比如,用户按Home键切换到桌面或打开另外一个Activity,这是当前Activity就会执行onPause()和onStop(),接着用执行onRestart()方法回到当前Activity()。
onPause():正常情况下,onStop()就会被调用,在特殊情况下,如果这个时候快速地返回当前Activity,那么onResume()就会被调用。当然这种情况很难出现。onPause()必需先执行完,新的Activity才会执行onResume()。所以可以在onPause()储存数据,停止动画等操作但不能太耗时。
onStop():可以做一些稍微重量级的回收工作,但不能太耗时。
onFreeze():当你的activity被暂停而在其他activity显示之前,你可以使用这个方法保存你当前的用户状态(一般来说是当前实例的用户状态)。暂停之后,为了回收资源供给前景activity,系统会在需要的时间停止(或者kill)你的应用。以后如果你的activity启动一个新的实例重新与用户进行交互,你保存在这里的状态都将通过onCreate()方法传递给新的实例。其后总是调用onPause()方法。
注意:
当用户打开新的Activity或者切换到桌面时,调用顺序如下:onPause()->onStop()。如果新的Activity采用透明主题,那么当前Activity不会调用onStop();
当Activity()被系统回收后再次打开,生命周期方法调用顺序和第一次打开Activity时一样,但不代表所有过程都一样,只是方法调用顺序相同而已;
栈顶的Activity需要先执行onPause(),新的Activity才会启动;(准确),调用顺序为:旧的onPause()->新的onCreate()->新的onStart()->新的onResume()->旧的onStop();
Activity的生命周期分为两部分:
- 正常情况下的生命周期;
- 异常情况下的生命周期:Activity被系统回收或者由于设备的配置发生改变从而导致Activity被销毁重建;
这里有三个生命周期比较关键:
完整生命周期:从最初调用onCreate(Bundle)到最终调用onDestroy();Activity会在onCreate()进行所有“全局”状态的设置,在onDestroy()中释放所有持有的资源。比如,调用setContentView去加载界面布局资源,初始化Activity所需的数据等。
可见生命周期:从activity调用onStart()开始,到调用对应的onStop()为止;在这段时间内用户可以在屏幕上看到这个activity,尽管并不一定是在前台也不一定可以和用户交互。在这两个方法之间你可以维护那些activity在用户显示时所需的资源。随着用户的操作或设备屏幕的点亮或熄灭,这两个方法可能会被调用多次。举个例子来说,你可以在onStart()中注册一个IntentReceiver来监控那些可以对你的UI产生影响的环境改变,当你的UI不继续在用户面前显示时你可以在onStop()中注销这个IntentReceiver。每当activity在用户面前显示或者隐藏时都会调用相应的方法,所以onStart()和onStop()方法在整个生命周期中可以多次被调用。
可操作生命周期:从activity调用onResume()开始,到调用对应的onPause()为止;这段时间activity处于其他所有activity的前面,且与用户交互。一个activity可以经常在resumed和paused状态之间转换——例如手机进入休眠时(设备屏幕的点亮和熄灭)、activity的结果返回时、新的intent到来时——所以这两个方法中的代码应该非常的简短。
onRestart():表示Activity正在被重新启动,一般情况下,当前Activity从不可见变为可见,onRestart()就会被调用。这一般是用户操作导致的,比如,用户按Home键切换到桌面或打开另外一个Activity,这是当前Activity就会执行onPause()和onStop(),接着用执行onRestart()方法回到当前Activity()。
onPause():正常情况下,onStop()就会被调用,在特殊情况下,如果这个时候快速地返回当前Activity,那么onResume()就会被调用。当然这种情况很难出现。onPause()必需先执行完,新的Activity才会执行onResume()。所以可以在onPause()储存数据,停止动画等操作但不能太耗时。
onStop():可以做一些稍微重量级的回收工作,但不能太耗时。
onFreeze():当你的activity被暂停而在其他activity显示之前,你可以使用这个方法保存你当前的用户状态(一般来说是当前实例的用户状态)。暂停之后,为了回收资源供给前景activity,系统会在需要的时间停止(或者kill)你的应用。以后如果你的activity启动一个新的实例重新与用户进行交互,你保存在这里的状态都将通过onCreate()方法传递给新的实例。其后总是调用onPause()方法。
注意:
当用户打开新的Activity或者切换到桌面时,调用顺序如下:onPause()->onStop()。如果新的Activity采用透明主题,那么当前Activity不会调用onStop();
当Activity()被系统回收后再次打开,生命周期方法调用顺序和第一次打开Activity时一样,但不代表所有过程都一样,只是方法调用顺序相同而已;
栈顶的Activity需要先执行onPause(),新的Activity才会启动;(准确),调用顺序为:旧的onPause()->新的onCreate()->新的onStart()->新的onResume()->旧的onStop();
相关文章推荐
- Android 利用内容观察者实现短信窃听
- Weex Android SDK源码分析之Module(navigator)
- Android Spinner值不显示,选择列表正常
- Android之SQLite登录注册与EditText清除功能
- Android 手机设置中的关于手机界面
- android提供ToolBar实现划动菜单的陷阱
- Android系统默认Home(Launcher)的启动过程小结
- Android 内容观察者的原理
- Android自动获取短信验证码
- 了解使用Android ConstraintLayout
- Retrofit与RxAndroid结合使用
- Android Scroll分析(二)——滑动的几种方法
- Weex Android SDK源码分析之Module(modal)
- canvas的save,restore方法的使用理解
- 安卓侧边栏实现
- Android中ListView长按事件和点击事件的冲突问题
- Android官方文档之Animation
- 简单的朋友圈界面-Android(一)
- Android AsyncTask
- Android——初识RxJava