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()。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章