首先需先清楚android中四大启动方式:

  • standard
  • singleTop
  • singleTask
  • singleInstance
网上一大堆介绍的,不再赘述了。

然后贴两个帖子:

android中activity的四种加载模式

android:launchMode设置成singleTask时的一个问题


Activity启动模式singleTask,singleInstance研究


然后,下面是我自己的总结:(半拿半总结)

关于SingleTask模式:

1.一个项目中的android.intent.action.MAIN 的Activity不要设置为singleTask模式,否则,当ActivityA --> ActivityB此时比如来了一个电话,按了Home键,接完电话然后重新点击此程序图标将又重新从ActiivtyA开始执行,原因是:

第一个是singletask也就是启动第一个actvity的时候会放置放置到一个新的task下,当你再启动其他activity时第一个activity就在栈的底部,当你再次进入程序时他会查看是否有其他任务的栈里含有这个singletask的activity如果它在底部那么就将在他上面的都finish掉,所以再回去总是第一个界面。

”android:launchMode设置成singleTask时的一个问题第22楼说的


2.如果想要从ActivityX中setResult返回结果,那么此Actiivty不能设置为SingleTask模式,否则将无法收到intent信息,原因参照Activity启动模式singleTask,singleInstance研究
3.如果ActivityA设置为singleInstance模式,那么不管ActivityB有没有设置为singleTask,从ActivityA中startActivityForResult到ActivityB中,都无法获得结果,原因是 singleInstance要求activity的实例不仅只有一个,并且整个task中只有一个activity实例,而singleTask所在的栈中允许存在其他activity的实例
”(来源Activity启动模式singleTask,singleInstance研究
4.假设场景启动应用程序顺序是ActivityA --> ActivityB --> ActivityC,而要求如果在ActivityC中按Home键,然后重新进来,启动顺序是ActivityA --> ActivityC,这个ActivityC不确定指的是按Home键的Activity,怎么办?一定要在每次唤醒之后先启动ActivityB,咋办? 解决办法是:对ActivityA设置为SingleInstance模式,然后再在应用中增加一个中间Activity,假设为MiddleActivity,在其onCreate()方法中直接finish(),然后在ActivityA中增加一个变量boolean mIsFirstLaunch = true;当第一次跳转ActivityB的时候设其为false,当再次启动的时候检测mIsFirstLaunch 是否为false,为false就进入MiddleActivity,而MiddleActivity又直接finish()了,就又回到ActiivtyC了 个中缘由:ActivityA为SingleInstance模式,即在一个单独的Task中且只有它一个Activity,而其他activity都在另一个task中,当按H键的时候ActivityC在此task中的栈顶,但是相隔两个task中,而且又不确定应该从ActivityA中启动哪个activity,所以直接以MiddleActivity为跳板,回到栈顶,然后finish(),自然就回到ACtivityC了。 很easy的一个问题,关键是思路。

更多相关文章

  1. Android 虚拟摇杆,多种模式回调,返回距离级别,方向,角度。
  2. android图片压缩的3种方法实例
  3. 【Android学习入门】Android中activity的启动模式
  4. Android Thread 介绍与实例
  5. Android声音播放实例代码
  6. Android 1.5: 飞行模式分析

随机推荐

  1. Service
  2. Android之Http请求基础
  3. android camera preview方向
  4. Android创建文件夹及文件并写入数据
  5. Android(安卓)杀掉自己进程的方法
  6. android按键 禁用
  7. Android(安卓)调用shell命令打印
  8. android 混淆打包后 Gson拿到的实体类转
  9. Android图片旋转,缩放,移位,倾斜,对称
  10. android 判断是否有可用网络