Android群英传笔记-Activity

Activity

Activity是与用户交互的第一节课,它提供了一个用户完成指令的窗口。系统采用Activity栈的方式来管理Activity

Activity形态

Activity拥有多种形态,可以在多种形态之间切换,以此控制自己的生命周期。

  • Activite/Runing:位于栈顶层,可见,正在与用户交互
  • Paused:Activity失去焦点,被一个非全屏的activity或者透明的activity放置到栈顶时。只是失去了与用户的交互能力,所有的状态信息和成员变量都还被保持着,在系统内存极低的情况下,才被回收
  • Stopped:一个Activity被另一个Activty完全覆盖。不可见,但是保存了状态信息和成员变量
  • Killed:Activity被回收或者从没有被创建过。

Activity生命周期

onCreate,onStart,onResum,onPause,onStop,onDestroy。
其中,只有Resumed,Pused,和Stopped状态是稳定的, 其他都是过渡状态。

Activity启动与销毁

onCreate():创建ui基本元素
onPause()与onStop:清除Activity资源,避免浪费。
onDestroy():Activity引用会被销毁,但线程不会,所以要清除被开启的线程
在Activity被销毁时,应该记得关闭广播,线程,甚至是map等等资源

Activity停止与恢复

从paused状态,部分不可见到可见,会再次调用onResum()方法
从Stopped状态,不可见到可见,会调用onStart()方法。

Activity重新创建过程

Activity被系统回收后,Activity的状态会通过onSaveInstanceState()保存在Bundle对象中,自己可以增加额外的键值对存入Bundle对象。

注意:finsh()操作(例如back返回),都不会保存状态。

https://blog.csdn.net/lixiang0522/article/details/7565401?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2

Android任务栈

简介

一个android App的功能会被拆为多个Activity,各个Activity通过Intent连接,安卓系统通过栈结构管理Activity,栈底元素就是整个任务栈的发起者。

当一个app启动,如果环境中不存在该app的任务栈,系统就会创建一个任务栈(Task),此后,这个app启动的Activity都会在这个任务栈中被管理(一般来说)。

注意:一个app的Activity一定都在同一个Activity中,一个任务栈中,Activity可能来自不同App。

AndroidMainfest 启动模式

  • standard:默认启动模式,每次都会创建新的实例,在原来Activity之上。
  • singleTop:如果栈顶是要创建的实例,则直接引用(会调用newIntent方法),否则创建新的实例。适合收到消息后,显示界面这种场景。
  • singleTask:如果同一个任务栈有将要启动的Activity,则将这个Activity置于栈顶,之上的Activity全部销毁,否则新建一个activity。如果其他程序以singleTask启动这个Activity,则会新建一个任务栈。如果已经有后台的任务栈中含有这个Activity,则这个任务栈会被提到前台。
  • singleInstance:声明singleInstance的Activity会出现在一个新得任务栈中,这个栈只有这么一个Activity。常用于与程序分离的界面,例如紧急呼叫。
    注意:对于声明了singleTop或者singleInstance的Activity,它不能使用startActivityforResult()来启动其他Activity。因为默认不同Task之间,除了使用intent,是不能传输数据的。

intent Flag启动模式

上面是在mainfest文件中的设置Activity的启动方式,这里还有另外一种方式,就是intent flag

  • intent.FLAG_ACTIVITY_NEW_TASK:这种方式启动的每一个Activity,都会在一个新的任务栈中。通常用在 service中启动Activity的场景,因为servive中不存在Activity的任务栈,需要新创建。
  • FLAG_ACTIVITY_SINGLE_TOP:就是single top模式
  • FLAG_ACTIVITY_CLEAR_TOP:就是single task模式
  • FLAG_ACTIVITY_NO_HISTORY:这种模式启动其他Activity后,自己就消失了,不会保留在任务栈中。

清空任务栈

系统提供清空任务栈的方法帮助我们清空一整个Task,在mainfest文件,activity标签中·使用。

  • clearTaskOnLaunch:每次返回该Activity时,都清空该Activity之上的所有Activity。
  • finishOnTaskLaunch:与clearTaskOnLaunch类似,只是它是作用在自己身上,当离开这个Activity所在的任务栈,那么用户再返回时,这个Activity就会被finsh掉。
  • alwaysRetainTaskLaunch:该Activity所在的Task将无视所有的清理命令,一直保持当前Task状态,免死金牌。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值