Android 总结2:Activity生命周期

1 完整生命周期

  • 6个
onCreate —— onStart—— onResume——onPause——onStop——onDestory
Android 总结2:Activity生命周期_第1张图片
Activity生命周期
  • 1所有Activity生命周期方法的实现都必须先调用其父类版本。

  • 2由于Activity经常会暂停和恢复之间切换,所以onResume和onPause这两个方法应当是轻量级的。

  • 3在系统再某种紧急情况下需要回收内存,onStop、onDestory可能不会被调用,因此需要在onPause中把需要长期保存的数据保存起来。

2 经典场景

场景1:第一次启动A

A:【onCreate —— onStart—— onResume】

场景2:在A上启动B

A:【onPause —— (被B覆盖)onStop——(finish或系统回收) onDestory】  
B:【onCreate —— onStart—— onResume】(B会等到A的onPause运行后,执行,所有保存瞬时数据应该在onPause里,耗时操作需要开子线程处理)

场景3:从B返回A

B:【onPause —— onStop—— onDestory】
A1:【(finish或系统回收)onCreate —— onStart—— onResume】或 A2:【 onReStart——onStart—— onResume】

场景4:锁屏与解锁

//锁屏
onPause,不会调onStop
//解锁
onResume

场景5 点击HOME键、来电

1、Home键,来电:onPause -> onStop 
2、回到App:onRestart ->  onStart -> onResume  

场景6 横竖屏幕切换

  • 1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

  • 2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

  • 3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

3 生命周期该做的事

  • onCreate()

声明UI元素,定义成员变量,配置UI等
尽量少做些事,避免程序启动太久而看不见界面
一旦onCreate() 操作完成,系统会迅速调用onStart() 与onResume()方法

  • onDestoty()

需要将该activity彻底移除的信号时,系统会调用这个方法
大多数app并不需要实现onDestory()这个方法,由于局部类references会随activity的销毁而销毁
我们的activity应该在onPause(), onStop()中执行清除activity资源的操作
如果含有onCreate()中创建的后台线程,或是其他有可能导致内存泄漏的的资源,应在onDestory()中清理资源
在onCreate()中,直接调用finish()方法,系统会直接调用onDestory()方法,跳过其他的声明周期
//阿里推荐
不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的
销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在
Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。

  • onPause()

停止动画或其他运行的的操作,那些都会导致cpu浪费
提交用户离开时期保存的内容(例如邮箱草稿)
释放系统资源,Camera,Broadcast Receiver,sensors(传感器,比如GPS) ,以及任何其他影响电量的资源
不应该保存用户数据到永久存储上 (File或Db中)
尽量减少onPause() 中的工作量避免切换到下一个activity变得缓慢
//阿里推荐
当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate
方法,所以在 onPause 方法中不适合做耗时较长的工作,这会影响到页面之间的跳
转效率。
在 Activity.onPause()或 Activity.onStop()回调中,关闭当前 activity 正在执
行的的动画。

  • onResume()

恢复activity时,应该初始化那些onPause() 释放掉的组件
执行那些activity每次进入resume state 都需要进行初始化的动作

  • onStop()

应该释放那些不再需要的所有资源,避免内存泄漏,onStop() 后系统会在需要内存空间时摧毁它的实例
使用onStop()来执行那些CPU intensive的shut-down操作,例如往数据库写信息
系统会保存布局中视图的当前状态,例如,可以保存EditText中的文本内容,停止通过Service定时更新UI上的数据的Service

  • onStart()

在onStop()中里面做了那些清除的操作,就应该做instant中把那些清除掉的资源重新创建出来

4 活动状态

1.运行状态
2.暂停状态
3.停止状态
4.销毁状态

5 活动生存期

1.完整生存期 onCreate===onDestory
2.可见生存期 onStart===onStop
3.前台生存期 onResume===onPause

你可能感兴趣的:(Android 总结2:Activity生命周期)