Activity的生命周期


前言

Activity作为四大组件之一,其重要性不言而喻;接下来我将从生命周期和启动模式两个方面去解析Activity<基于《Android开发艺术探索》>


生命周期

Activity的生命周期主要分为两大类:
1.典型情况下的生命周期
是指在有用户的参与情况下,Activity进行的一系列生命周期的转变
2.异常情况下的生命周期
是指Activity被系统回收或者由于当前设备的Configuration发生变化导致Activity别销毁重建

1.典型情况下的生命周期分析

  1. onCreate():

这个阶段Activity正在被创建(可在这个阶段进行一些初始化工作:如setContentView(R.id.创建的布局名)和
加载界面的布局资源和初始化一些数据)

  1. onRestart()

这个阶段Activity在重新启动(从状态来说:从不可见状态重新转变为可见的状态(onRestart调用)),
例如:用户在手机端操作打开一个新的Activity,那么当前的Activity就会执行
onPause()–>onStop();然后当用户再一次切换回这个Activity时,Activity又
会调用onRestart重新激活

  1. onStart()

这个阶段Activity正在启动(Activity可见,但是没有出现在前台,无法与用户进行交互)—>就是已出现但用户无法直观看到(Activity在后台)

  1. onResume()

这个阶段Activity可见,出现在前台可与用户进行交互

  1. onPause()

这个阶段Activity正在停止,这个阶段分为两种
1.执行停止;onPause()->onStop
2.执行恢复:onPause()->onResume()[条件很苛刻,用户难以实现]

  1. onStop()

这个阶段Activity即将停止,可进行一些回收处理(稍微重量级,少耗时)

  1. onDestroy()

这个阶段Activity即将被销毁,可进行回收工作和资源的释放

Activty的生命周期图示:
在这里插入图片描述
注意点:

1.用户打开新的Activity或者返回桌面时:onPause()->onStop()
但是如果是新吊起的Activity采用透明主题,那么则不会回调onStop()
2.用户重新回到原来的Activity则调用:onRestart()->onStart()->onResume()[即到Activity出现为止]
3.用户使用回退(back):即关闭这个Activity:onPause()->onStop()->onDestroy()

2.异常情况下的生命周期分析

2.1 资源的系统配置改变导致Activity被杀死重建

图示:
在这里插入图片描述
注意点:

1.系统调用onRestoreInstanceState()时,会将onSaveInstanceState()保存的Bundle对象作为参数传递给onRestoreInstanceState和onCreate();
2.onRestoreInstanceState只有在Activity确认是被系统回收了,重建Activity的情况下才会被调用
3.每个view都有onRestoreInstanceState和onRestoreInstanceState方法
4.view的保存和恢复:Actvivity被意外停止,那么Activity调用onSaveInstanceState()方法传输数据,然后Activty->Window->顶级容器保存数据(顶层容器是一个ViewGroup,一般来说可能是DecorView(被认为是Android视图树的根节点视图))->通知子元素去保存[委托]

2.2 内存不足导致低优先级Activity被杀死

Activity按照优先级从高到低可分为:

1.前台Activity:正在和用户进行交互的Activity,优先级别最高
2.可见的但是不是前台Activity:如弹出的对话框
3.后台Activity:已被暂停的Activity(比如执行了onStop()),优先级别最低、
所以当系统的内存不足时,系统就会按照上面的优先级去杀死Activity所在的进程;然后在通过onRestoreInstance和StateonRestoreInstanceState来存储和恢复数据
可以将后台的工作放入Service中从而保证进程有一定的优先级,不容易被杀死

最后说一点:
如果想系统不重新创建Activity可以给Activity指定configChanges属性(多个值可以使用"|"链接),configChanges的具体数值就不做解释了,这个时候将调用onConfigurationChanged方法,而不是onRestoreInstance和StateonRestoreInstanceState

minSdkVersion和targetSdkVersion:

minSdkVersion: 最小的SDK版本(app可以运行的最小版本)
targetSdkVersion: 是android向前兼容的主要方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值