您的位置:首页 > 其它

关于Activity启动模式(launchMode)和intent设置测试后 发现和网上说的不符 是不是我错了 求解

2018-01-05 15:13 281 查看
看了很多关于Activity启动模式(launchMode)和intent设置intent.setFlags

(Intent.FLAG_ACTIVITY_NEW_TASK);

发现网上说的和我测试结果 不符。

想必大家一定看过 http://marshal.easymorse.com/archives/2950 这篇文字的解说。 我当初看完之后

觉得确实很清晰了

但又看了其他人的关于结合intent的Flags 以及ActibvityAffiity属性等文章后 越来越迷糊。

现在说说我的不解 :

先看大多数 大家总结的4种方式如下:

standard  每次都会新建,每个Task都可以有,且每个Task都可以有多个实例(每个Task都可以有,且

可以有多个)  

singleTop 当前实例如果在栈顶,就不新建实例,调用其OnNewIntent。 如不在栈顶,则新建实例  (

每个Task都可以有,且可以有多个,在栈顶时可复用)  

singleTask 新建一个Task,如果已经有其他的Task并且包含该实例,那就直接调用那个Task的实例。(

只有一个Task中会有)  

singleInstance 新建一个Task,且在该Task中只有它的唯一一个实例。 (只有一个Task会有,且该Task

中只有它)

standard 没有悬念很好理解 测试也符合。

singleTop 也基本理解,但有人说如果配合FLAG_ACTIVITY_NEW_TASK使用则会产生新的TASK 对此我测试

的时候 并没有发现有新的TASK产生 打印的TASKID依然是原先的。

singleTask 对此很迷糊 大家都说是产生了一个新TASK 测试后并无发现创建了新TASK 且加上

FLAG_ACTIVITY_NEW_TASK也无效,依然是TASKID无变化,是不是我理解错误呢?

singleInstance 对此表示理解 且经过测试 也都符合文档描述。且创建了新的TASKID 且 这个TASKID种

只有它自己的实例存在。

附上我的测试过程

test.task.ActivityB(standard) ->(FLAG_ACTIVITY_NEW_TASK)-> test.task.ActivityC(standard)   

TASKID 无变化

test.task.ActivityB(standard) ->(FLAG_ACTIVITY_NEW_TASK)-> test.task.ActivityC(singleTop)   

TASKID 无变化

test.task.ActivityB(standard) ->(FLAG_ACTIVITY_NEW_TASK)-> test.task.ActivityC(singleTask)  

TASKID 无变化

test.task.ActivityB(standard) ->(FLAG_ACTIVITY_NEW_TASK)-> test.task.ActivityC(singleTask)  

TASKID 有变化 新TASKID

希望前辈帮我理清这个基础性的东西,同时也帮助更多新手 对此概念进行进一步的强化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Activity