谈谈我在AndroidManifest.xml文件中设置Activity的启动模式为singleTask时遇到的两个坑.
这里只谈singleTask启动模式,其他的在此处被省略.
坑一:
假设有三个Activity:分别为AActivity,BActivity,CActivity,其中AActivity的启动模式为singleTask,
其他的都是默认AActivity为程序的入口.在启动AActivity后,在AActivity中启动BActivity,并finish掉
AActivity,再在BActivity中启动CActivity,BActivity不finish.此时栈顶的Activity是CActivity,并按home
键返回桌面,再从桌面点击应用的图标启动启用,此时程序会重新启动AActivity(ps:我一直以为是
回到CActivity,实践证明我错了),并将其置为栈顶.你要想再回到回到桌面前的CActivity,得按返回
键才能回到CActivity.我解释不了这其中的原理.求解释!!!!
坑一解决办法:新建一个SplashActivity作为程序的启动Activity,启动模式为默认,在SplashActivity
启动启动模式为singleTask的AActivity.在按之前的步骤可,home键回来的时候可以依旧是CActivity.
坑二:
(1)假设有两个Activity:分别为ActivityA和ActivityB,其中ActivityA的启动模式为singleTask.在
ActivityA中启动ActivityB,ActivityA不finish,再在ActivityB中启动ActivityA,ActivityB不用finish,由于
ActivityA的启动模式为singleTask,会将ActivityA至于栈顶,并将其上的ActivityB弹出桟.按返回键
会直接回到桌面.
(2)依旧是两个Activity:分别为ActivityA,ActivityB,其中ActivityA的启动模式为singleTask,在ActivityA
中启动ActivityB,ActivityA finish,再在ActivityB中启动ActivityA,ActivityB不finish,尽管ActivityA的启动模式
为singleTask,但是finish的时候已经将其弹出桟,所以,再次启动的时候重新创建了一个ActivityA对象压
入栈顶,所以这里在ActivityA中按返回键,结果与(1)的不一样,回到的是ActivityB.