Activity总结

Activity详解

1.Activity形态:

a.Active/Running:这时候,Activity处于Activity栈的最顶层,可见,并于用户进行交互。

b.Paused:当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转换为Paused形态了。比如我们在手机浏览器中浏览信息时,这时候弹出一条短信内容,那么这种情况下就是短信所在的Activity使得浏览器所在的Activity由Active转换为Paused状态;

c.Stopped:如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped状态,此时,它不可见,但依旧保存了所有状态信息。这个可以理解为当我们在浏览器浏览信息时,突然想要边听歌边浏览信息,那么这时我们按下home键(注意不能是back键),这时浏览器所在的Activity便为stopped状态,当我们再回去但浏览器时,浏览器还是保留着之前浏览着的信息。

d.killed:当Activity被系统回收掉或者Activity从来没有创建过,Activity就处于Killed状态。

2.Activity的生命周期:

a.三种稳定的状态:

  • Resumed:这个状态即为前面所说的Active/Running状态,此时Activity处于栈顶,处理用户的交互
  • Paused:当Activity的一部分被挡住的时候进入这个状态,这时候Activity不会接受用户输入
  • Stopped:当Activity完全被覆盖式,此时Activity不可见,仅在后台运行。

b.Activity的启动和销毁过程

  • 启动:oncreate()->onStart()->onResume()最终停留在Resumed状态,完成启动。
  • 销毁:直接调用onDestroy(),完成销毁

c.Activity的暂停和恢复过程:onPause()->onResume()

d.Activity的停止和恢复过程:onPause()->onStop()->onRestart()->onResume();

3.Android任务栈

a.任务栈的认识:我们知道一个android应用程序通过会拆分为多个Activity,而各个Activity之间通过intent之间进行连接,而Android系统,通过栈结构来保存整个应用程序的Activity,其中栈底的元素是整个任务栈的发起者。

b.当一个APP启动时,如果当前环境中不存在该APP的任务栈,那么系统就会创建一个任务栈。关于栈的结构是满足“后进先出”。

4.AndroidMainifest启动模式

  • standard:默认的启动方式,创建的新的Activity会覆盖在Activity上,我们来看下面的一个例子:
    test
    如上图,我们存在Activity A和B,上图的含义为首先由A跳转到B,然后再由B跳转回A;
    那么这种情况下,其对应的栈如下:

    test2

    我们发现当从B跳转回A时,并不是回到原来的old A中,而是创建创建了一个A放在栈顶

  • singleTop模式:在启动activity时,系统会判断当前栈顶是否为要启动的activity,如果是,则直接引用,否则创建一个新的activity。

  • singleTask:在启动activity时,检测整个activity栈中是否存在需要启动的栈,如果存在,则将该activity置于栈顶,并将该activity以上所有的activity都销毁。

  • singleInstance:这种启动模式比较特殊,因为它会启动一个新的任务栈,将activity放置在这个新的任务栈中,并保证不会有其他的activity实例进入。

  • 关于更多详细的讲解,推荐下面这个大牛的博客:
    四种启动模式详解

5.Intent Flag启动模式

  • 其实我们设置启动模式除了在mainifest中实现以外,还可以通过设置Intent的Flag来设置一个Activity的启动模式。
  • Intent.FLAG_ACTIVITY_NEW_TASK:使用一个新的Task来启动一个Activity。
  • FLAG_ACTIVITY_SINGLE_TOP:这个和上面的singTop模式是一致的
  • FLAG_ACTIVITY_CLEAR_TOP:类似singleTask模式
  • FLAG_ACITVITY_NO_HISTORY:这种模式下,当activity启动其他activity时,该activity就会消失,即不会保留在activity栈中。

6.清空任务栈

  • 在mainifest文件中的标签中可以使用下面的几种属性来清理任务栈;
  • clearTaskOnLaunch:每次返回该activity时,都会将该activity之上的所有activity都清除。
  • finishOnTaskLaunch:当离开这个activity所处的Task时,用户再返回时,该activity会被finish掉。
  • alwaysRetainTaskState:设置为true时,将不接受任何清理命令,一直保持当前Task状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值