又是一个新的30天了,感觉时间过的好快,自己学东西学的好慢。
这个星期没有碰到什么大的问题吧,或者是大的陌生的东西,也是比较懒,没花太多时间写代码哈哈。就是碰到了一个Fragment中无法回调onActivityResult的问题,其实这个问题啊,百度一搜一大堆的,有说是我的launchmode没有写对的,有说这是个Google的bug....blablabla.....
就让我不经的想到,这个onActivityResult的回调原理是什么呢?于是我去Android Development上找startActivityForResult的解释,果然不出所料。
Note that this method should only be used with Intent protocols that are defined to return a result. In other protocols (such as ACTION_MAIN or ACTION_VIEW), you may not get the result when you expect. For example, if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result.
这里说,不能用在singleTask里,同样也不能用在singleInstance里,这又让我想深入了解一下四种launchmode的原理了,于是重新看了一下,整理出来吧:
Standard Mode:Activity的默认方式,每次都会产生新的对象,比如你在A中点击产生B,从B返回 A,再次在A中点击后就会产生和B一样的一个D,比较消耗系统性能。
SingleTask:其实一个app打开之后就会生成一个task,所以明白了吧?如果lauchmode设置成singleTask之后,开启一个新的Activity就等于开启了一个新的Task,很占资源。
SingleInstance:这个就是如果Task中存在这个Instance就调用,没有就创建,类似设计模式里的单例模式一样。
SingleTop:这个很简单,如果你启动的 Activity在栈的顶部,就直接调用,如果不再,就重新创建。
最后贴上谷歌给我们的建议:
As shown in the table above, standard is the default mode and is appropriate for most types of activities. SingleTop is also a common and useful launch mode for many types of activities. The other modes — singleTask and singleInstance — are not appropriate for most applications, since they result in an interaction model that is likely to be unfamiliar to users and is very different from most other applications.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于