设为首页 收藏本站 662p开源网
开启辅助访问 切换到宽版

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 立即注册 找回密码

安卓教程网

查看: 4175|回复: 3

Activity的生命周期

[复制链接]
发表于 2017-12-7 10:35:49 | 显示全部楼层 |阅读模式
更多
1.A页面跳转到B页面,点击返回,这个过程中的生命周期
B页面完全覆盖A页面的情况 A跳转B页面的生命周期方法执行顺序: onPause(A)->onCreate(B)--->onStart(B)--->onResume(B)--->onStop(A)
B页面点击后返回生命周期执行顺序: onPause(B)-->onRestart(A)-->onStart(A)-->onResume(A)->onStop(B)-->onDestroy(B)
B页面不完全覆盖A页面的请求 A跳转B页面的生命周期方法执行顺序 onPause(A)-->onCreate(B)-->onStart(B)-->onResume(B) B页面点击后返回生命周期执行顺序 onPause(B)-->onResume(A)-->->onStop(B)-->onDestroy(B)

2.Activity横竖屏切换的生命周期
默认情况:onPause-->onStop-->onDestroy-->onCreate-->onStart-->onResume
屏蔽横竖屏切换导致生命周期重新执行
<activity android:name=".activity.SystemVideoPlayer" android:configChanges="keyboardHidden|screenSize|orientation" />

3.onCreate
①它本身的作用是进行Activity的一些初始化工作,比如使用setContentView加载布局,对一些控件和变量进行初始化等。
②但也有很多人将很多与初始化无关的代码放在这,其实这是不规范的。此时Activity还在后台,不可见。所以动画不应该在这里初始化,因为看不到…
4.onStart
①此时Activity已经可见了,但是还没出现在前台,我们还看不到,无法与Activity交互。其实将Activity的初始化工作放在这也没有什么问题,放在onCreate中是由于官方推荐的以及我们开发的习惯。
onCreate和onStart之间有什么区别?
(1)可见与不可见的区别。前者不可见,后者可见。
(2)执行次数的区别。onCreate方法只在Activity创建时执行一次,而onStart方法在Activity的切换以及按Home键返回桌面再切回应用的过程中被多次调用。因此Bundle数据的恢复在onStart中进行比onCreate中执行更合适。
(3)onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前文所说的,setContentView和资源初始化在两者都能做,然而想动画的初始化在onStart中做比较好。

5[size=1.17em].onPause()

①通常在onPause()回调方法中做以下事情
停止动画或者是其他正在运行的操作,那些都会导致CPU的浪费.
提交在用户离开时期待保存的内容(例如邮件草稿).
释放系统资源,例如broadcast receivers, sensors (比如GPS), 或者是其他任何会影响到电量的资源
②例如, 如果程序使用Camera,onPause()会是一个比较好的地方去做那些释放资源的操作。


  1. @Override
  2. public void onPause() {
  3. super.onPause(); // Always call the superclass method first

  4. // Release the Camera because we don't need it when paused
  5. // and other activities might need to use it.
  6. if (mCamera != null) {
  7. mCamera.release()
  8. mCamera = null;
  9. }
  10. }
复制代码


③不应该使用onPause()来执行CPU-intensive 的工作,例如写数据到DB,因为它会导致切换到下一个activity变得缓慢。  
④当Activity要跳到另一个Activity或应用正常退出时都会执行这个方法。此时Activity在前台并可见,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity时只有当一个Activity执行完了onPause方法后另一个Activity才会启动,而且android中指定如果onPause在500ms即0.5秒内没有执行完毕的话就会强制关闭Activity。从生命周期图中发现可以在这快速重启,但这种情况其实很罕见,比如用户切到下一个Activity的途中按back键快速得切回来。

6.onStop
①stop表示停止,此时Activity已经不可见了,但是Activity对象还在内存中,没有被销毁。这个阶段的主要工作也是做一些资源的回收工作。
②onPause方法和onStop方法有什么区别?(1)是否可见。onPause时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。
(2)在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。

7.onDestroy
①destroy表示毁灭,这个阶段Activity被销毁,不可见,我们可以将还没释放的资源释放,以及进行一些回收工作。
②OnStop方法和onDestroy方法有什么区别?
onStop阶段Activity还没有被销毁,对象还在内存中,此时可以通过切换Activity再次回到该Activity,而onDestroy阶段Acivity被销毁

8.onRestart
①restart表示重新开始,Activity在这时可见,当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法。这里一般不做什么操作。

9.为什么切换Activity时各方法的执行次序是(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop而不是(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume
(1)一个Activity或多或少会占有系统资源,而在官方的建议中,onPause方法将会释放掉很多系统资源,为切换Activity提供流畅性的保障,而不需要再等多两个阶段,这样做切换更快。
(2)按照生命周期图的表示,如果用户在切换Activity的过程中再次切回原Activity,是在onPause方法后直接调用onResume方法的,这样比onPause→onStop→onRestart→onStart→onResume要快得多。




新浪微博达人勋

高级会员

1633

积分

545

威望

0

金钱

Rank: 6Rank: 6

积分
1633
发表于 2017-12-7 10:37:38 | 显示全部楼层
{:1_A168:}A:L
发表于 前天 19:49 | 显示全部楼层
不知道怎样啊,顶先

新浪微博达人勋

注册会员

102

积分

34

威望

0

金钱

Rank: 2

积分
102
发表于 1 小时前 | 显示全部楼层
very good
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Archiver|手机版|小黑屋|安卓教程网 ( 粤ICP备12089784号  

GMT+8, 2017-12-15 21:45 , Processed in 0.398570 second(s), 47 queries .

Powered by Discuz X3.1

© 2001-2013 IOS教程网

快速回复 返回顶部 返回列表