星空网 > 软件开发 > 操作系统

关于Android Activity启动的flag和启动模式

 

  最近因为项目需求当中,需要按一个按键,退回到指定的Activity,有可能是连续退几个Activity,第一时间想到的是多写几个finish()......然后想想就不可能,查了下Activity的相关资料,假如需要回退到Activity A,那么把A的启动模式设置为singleTask就可以了,在Manifest.

  这样写确实是没有问题的,程序返回的时候,会调用Activity栈中A上面的所有Activity的finish()方法,然后重用A。因为顺便看到了一些Activity的flags,所以看了下,觉得似乎FLAG_ACTIVITY_CLEAR_TOP也可以做到这样的效果,考虑到大家好像都和FLAG_ACTIVITY_NEW_TASK一起用,虽然看文档觉得FLAG_ACTIVITY_NEW_TASK是多余的,但是也考虑到假如回退的Activity不存在的情况下.....凑合一下吧,于是就有了:

Intent intent = new Intent(this,A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

然后崩溃开始了。。查了好久才发现:

FLAG_ACTIVITY_CLEAR_TOP: 假如已经存在了一个能够响应此intent的activity类型的实例,则这个实例之上的所有activity都将被清理以使它位于堆栈的顶部来对intent做出响应。如果此时指定的activity的加载模式为“standard”(即默认情况下),则它本身也会从堆栈中移除,并加载一个新的实例来处理到来的intent。这是因为加载模式为“standard”的activity总会创建一个新实例来处理新的intent。

也就是,这种情况下,A会先销毁再创建,因此假如重写了A的onDestroy方法,释放资源的话,会导致两次释放资源的问题,如果我们设置加载模式为singleTask,则也不需要addFlags了,直接启动就可以了。。。顺便贴一下:

FLAG_ACTIVITY_NEW_TASK: 如果已经存在了一个与新activity有着同样affinity的任务,则activity会载入那个任务之中。如果没有,则启用新任务。

另外由相关的博文也联想到,我们也可以在Application的子类中建立一个list对Activity进行管理,主要方法是继承接口,重写OnActivityCreated,OnActivityDestroy方法,分别对应list.add, list.remove方法,当我们需要返回到某个特定的Activity的时候,可以在list中对它上面的Activity进行一个个finish(),具体还没有验证,因为直接设置Android::launchmode ="singleTask"比较简单,呵呵~

 

  

 




原标题:关于Android Activity启动的flag和启动模式

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

圆融汇通:https://www.ikjzd.com/w/1459
Amazon Best sellers Rank:https://www.ikjzd.com/w/146
侃侃网_跨境电商新媒体综合服务平台:https://www.ikjzd.com/w/1460
亿恩:https://www.ikjzd.com/w/1461
跨境眼_跨境卖家综合服务平台:https://www.ikjzd.com/w/1462
MoonSees:https://www.ikjzd.com/w/1463
合肥有什么约会的地方好玩的地方 合肥哪里适合情侣好玩的地方:https://www.vstour.cn/a/411237.html
曾家山滑雪场-曾家山滑雪场号码:https://www.vstour.cn/a/411238.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流