理解Android生命周期(一):activity

背景

Android将所有的活动放在一个栈中管理,并且当前可视活动被放在栈的顶部。

在任何情况下,一个活动可以处于以下的四个状态:

1.Running 活动是可视的并可以和用户交互
2.Paused 活动依然可视但是不可以和用户进行交互
3.Stopped 活动不可视也不可和用户交互
4.killed 活动自动被系统清除(因为内存不足)或者方法finish()被调用

活动生命周期

以下的流程图反映了活动的一系列方法执行路径

这里写图片描述

以下是对图中方法的说明:

activity生命周期可分为两种,一种是正常情况下的生命周期
方法说明:
onCreate(Bundle saveInstanceState): 变量的初始化工作,设置layout
onRestart():activity由不可见(stop状态)重新变为可见状态时首先调用。
onStart():activity已经创建完成,但是界面还不可见,另外可以进行一些数据恢复工作
onResume() :与onStart除了界面可见与不可见的区别外没有什么不同
onPause():界面仍然可见但是不可交互,不推荐在onPause中进行耗时的工作,可以进行一些轻量级的存储数据等工作。
onStop():与onPause()除了可见与不可见的区别外没有什么不同,可以进行一些稍微重量级的回收工作。
onDestroy() 可以进行一些耗时的数据销毁工作,此方法调用后activity不复存在

一种是异常情况下的生命周期

情况一:系统配置发生改变导致activity被销毁

此时生命周期如下:
onPause()
onSaveInstanceState(Bundle saveInstanceState) 保存数据,如listview的position信息,textview的文本信息,每个view都要实现此方法
onStop()
onDestroy()
onCreate(Bundle saveInstanceState)
onStart()
onRestoreInstanceState(Bundle saveInstanceState)
恢复数据,每个view都要实现此方法
onResume()
常见的系统配置改变情况有这样几种:系统语言切换(locale),横竖屏切换(orientation),界面模式切换-如夜间模式切换(uiMode),调出键盘(keyboardHidden)

如果想要阻止activity的重新创建,需要在activity的属性里加上configChanges。

举个常见的例子:configChanges=”local|orientation|uiMode|keyboardHidden” ,这样,上面的四种情况(本地语言改变|切换横竖屏|界面模式改变(比如开启夜间模式,API 8新加入|键盘可访问性改变(调出关闭键盘等))发生就不会重新创建activity了

情况二:系统内存不足导致activity被销毁

这个情况生命周期与情况一一致

activity的优先级:当前activity(前台)> 半透明activity(Pause状态)> 后台activity( 比如执行了onStop),优先级越靠后越容易被系统杀死,另外,如果我们有一些工作需要长时间进行,那么最好将其放在Service中,因为没有四大组件运行的进程优先级非常低,很容易被系统kill掉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值