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

看了很多关于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

希望前辈帮我理清这个基础性的东西,同时也帮助更多新手 对此概念进行进一步的强化。

posted on 2013-06-18 11:07  第五正  阅读(730)  评论(0编辑  收藏  举报