2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Android 深入探讨sigleTask和singletop的区别

Android 深入探讨sigleTask和singletop的区别

时间:2020-02-12 23:09:09

相关推荐

Android 深入探讨sigleTask和singletop的区别

1.singleTask和singletop都是保证了Activity在栈中的唯一性

2.singleTask和singleTop实例存在时,都不会重新创建 new task

不同之处有如下几点:

1.如果singleTask启动的ActivityA位于栈底,在栈顶startActivity到这个ActivityA时会调动 onNewIntent->onStart->onResume。

但singleTask启动的的ActivityA不存在时,会重新创建ActivityA,调用方式OnCreate->OnStart->OnResume

2.如果singletop启动的ActivityB在栈底时,在栈顶startActivity到这个ActivityB时会重新调动 onCreate->onStart->onResume,但不会调用OnDestroy,且singletop启动的的ActivityB不存在时,会重新创建ActivityB,调用方式OnCreate->OnStart->OnResume

3.singleTask在栈底时,从栈顶startActivity到栈底ActivityA,那么该栈startActivity的发起者的中间部分Activity会被销毁。而singletop是逐级跳跃到栈顶

追加一点singleInstance,虽然也是保证唯一性,但改模式的Activity是全局性的唯一性,生命周期和应用程序相同,不能及时回收,此外的话Activity在MVC充当Controller的角色,

这点显然对singleIntance来说不适合,因此不建议使用。

4.singleTask不适合充当ChildActivity,但singletop适合

5.对作业栈,默认情况下,没有任何影响,因为栈的taskid是相同的,可以获取getTaskid(),默认情况下每个activity的taskid相同

但是,如果自定义了栈的标签(这个标签相同的singletask activity在同一个作业栈中),那么taskid就会初选差别

android:taskAffinity="com.sample.lanchmode.tester.main",那么一旦另一个作业栈被销毁,下次必然重建(相信我,这不是废话)。

为了一句不是废话,我需要来证明一下。

当我们的初始加载WelcomeActivity界面--->HomeActivity界面时,如果将HomeActivity的启动模式设置为sigleTask+android:taskAffinity="自定义(一般是类名)",

①那么WelcomeActivity销毁后,在到达HomeActivity之后,HomeActivity回作为一个新的作业栈栈底而存在,所以由HomeActivity启动的Activity的TaskId和HomeActivity相同。

②这个过程,WelcomeActivity和HomeActivity的TaskId是不相同的,问题出现了,当我们按下Home键,然后在点击桌面上的app图标你会发现,WelcomeActivity再次出现了,

而且再次进入了HomeActivity,并且这个HomeActivity调用了OnNewIntent,却没掉用OnCreate,所以来说他一直存在这,但你需要再次过渡才能找到它。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。