Android启动模式的探索

来源:互联网 发布:手机淘宝如何五星好评 编辑:程序博客网 时间:2024/05/16 23:36

(1)standard模式:标准模式,这是系统的默认模式。每次启动一个Activity都会重新建一个新的实例,不管这个实例是否已经存在。被创建的Activity的生命周期它的onCreate()、onStart()、onResume()都会被调用。一个任务栈当中会有同一个Activity的多个实例,多个实例也可以属于不同的任务栈。如果A Activity启动了 B Activity,那么B Activity就会进入到A Activity的任务栈中。当使用ApplicationContext去启动standar模式的Activity会报错,因为standar模式的Activity默认会进入启动它的Activity的任务栈中,但是非Activity类型的Context(如ApplicationContext)没有任务栈,解决错误需要给待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会创建一个新的任务栈。

(2)singleTop模式:栈顶复用模式。如果新Activity位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调。这个Activity的onCreate、onStart、不会被系统调用,因为它们没有发生改变。如果新Activity的实例已存在但是不在栈顶那么Activity仍然会重建。

(3)singleTask模式: 栈内复用模式。 只要Activity在一个栈中存在,那么多次启动此Activity都不会重建实例,系统会回调其onNewintent. 假如Activity A是singleTask模式,A请求启动后,系统首先查找是否存在A想要找的任务栈,假如不存在则新建任务栈然后把创建A实例放入栈中;假如存在,就看A在该栈中是否存在实例,如果存在系统就会把A调到栈顶并且调用它;假如实例不存在,就创建A的实例并且把A压入栈中。

注意一个特例:如果Activity D的所需要任务栈为S1,并且当前任务栈情况为ADBC(C为栈顶)系统会把D切换到栈顶并调用其onNewIntent,但是不会重建。同时singleTask有clearTop效果,会导致栈内所有在D上面的Activity全部出栈。只剩下AD。

(4)singleInstance模式:单实例模式。它拥有singleTask模式的所有特性,另外,具有该种模式的Activity只能单独的位于一个任务栈。比如Activity A是singleInstance,A启动后系统会为他新建一个任务栈,然后A独自在这个新的任务栈中。

TaskAffinity:任务相关性 这个参数标识了Activity所需要的任务栈的名字。默认情况下是应用的包名,也可以认为指定。TaskAffinity和singleTask配对使用时,TaskAffinity是具有该模式的Activity的目前任务栈的名字。

任务栈分前台后台,后台任务栈得Activity处于暂停状态,可通过切换切换到前台。

标志位
Activity的Flags有很多,常用的标记位有:
- FLAG_ACTIVTTY_NEW_TASK
等同于singleTask
- FLAG_ACTIVTTY_SINGLE_TOP
等同于singleTop
- FLAG_ACTIVTTY_CLEAR_TOP
- FLAG_ACTIVTTY_EXCLUDE_FROM_RECENTS
不会出现在Activity的历史列表里

阅读全文
0 0
原创粉丝点击