Task 和The Back Stack

一个task就是一个应用程序在运行时出现所有的activity(包括来自其他应用的activity)的收集器。task使用back stack来管理activities。

当用户启动一个应用时,这个应用的task就会进入foreground,如果这个应用没有对应的task(即这个应用最近没有被打开过),那么系统就会为这个应用新建一个task,且这个应用的main activity作为stack中的根activity。

  • stack内部

下图简要描述了新的activity是如何被添加到back stack中和stack中的activity是如何被弹出stack中的。

这里写图片描述

activity A启动activity B,则activity A停止,但是系统保存其状态,如果用户在activity B中返回则activity B被弹出且销毁,activity A以被保存的状态恢复。当所有的activity被从stack中移除,那么task for the application就不再存在。

  • stack之间

当用户启动另一个新的task或者是按Home button返回到Home screen时,当前的task就会进入到background。
举例来说:当前应用程序的task(Task A)在foreground,当用户返回Home screen 启动另外一个应用时,该应用的task(Task B,若没有就新建)就进入foreground。在Home screen出现时,Task A就已经进入background等待被再次唤醒,其stack中的activity都进入stop状态。当用户再次启动启动了Task A的应用时,Task A就再次回到foreground且其stack中的所有的activity是完整的,最顶部的activity再次获得用户焦点。这时,用户就可以在Task A和Task B之间来回转换。

注意:在background中可以同时存在多个task,但是如果用户在background中同时运行过多的task时,系统就可能开始销毁background中的activity来恢复内存,这将会导致activity的状态会消失。

  • 保存activity状态

    当一个activity停止时,系统会默认地保存它的状态,但是你应该主动地调用回调方法来保存其状态,以防该activity被销毁还得重建。
    有的时候系统为了恢复内存,会销毁处于stop状态的activity,这样关于这个activity的状态信息就会丢失,为了避免这样的情况发生,你应该在你的activity中实现 onSaveInstanceState()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值