android中activity启动模式遇到的坑

写这些东西其实是我要离职,正在重新复习以前的东西,并且将自己在前一家公司遇到的一些问题记录下来.

先大致的来了解一下android中4中启动模式:

  1. standard:这种启动模式对于我们的activity来说是最常用的,不进行配置也默认是这种启动模式,这种启动模式就是每一次启动activity都会创建一个activity的实例,并将它放到栈中(startactivity()).
  2. singleTop:这种启动模式主要是用于当我们栈顶存在这个activity的实例是,就不创建,直接进行复用.
  3. singleTask:这种启动模式作用是:当我们的栈中存在这个activity的实例时,我们就复用这个activity,并且栈中在这个activity之上的实例都会被移除栈.
  4. singleInstance:当使用这种启动模式时,就是我们会为这个activity单独创建一个栈,用来存放当前的activity的实例,这个任务栈中必定只有这一个singleInstance类型的Activity.

简单的复习了下启动模式,接下来进入正题.
记得刚来这家公司时,公司让我接手的是一个直播类的项目,在这个项目中有这么一个功能,这个功能差不多每个app上都有,但是当时自己没碰到,所以没有深究,这个功能是从本地图库中选择视频或者是选择图片上传到服务器.
当时我们我这个app有3个地方用到了这个功能,但是其中有一个上传图片失败,开始以为是代码问题,另外一个地方上传成功,这就不是代码问题了,后面查找到了资源文件哪里,对比发现多了一个配置:

android:launchMode=”singleTask”

就是这个启动模式,让我们的上传图片失败,配置了这个属性的activity,我们不能用startActivityForResult()启动,我们从系统图库中选择图片就是通过startActivityForResult(),为什么通过这种方式就出问题了呢?

假设 singleTask 类型的Activity的taskAffinity属性设置的为另一个Task启动,并且这个Task不是空。那么它下面就还有其他Activity,当结束该singleTask 类型的Activity的时候,那么出现的将是另一个完全不相干的Activity而不是启动singleTask 类型的Activity。为了防止这种情况的发生。所以规定不许这么做.

ok,今天总结自己项目中的一个小问题,就到这了.

你可能感兴趣的:(小问题)