Android 启动模式在代码中的实现

来源:互联网 发布:淘宝退换货要求 编辑:程序博客网 时间:2024/04/27 23:37

1、FLAG_ACTIVITY_NEW_TASK:如果将intent设置这一项就会从历史队列中独立出来,生成一个新的activity的队列。

2、FLAG_ACTIVITY_CLEAR_TOP:将位于新启动的activity(前提是已存在task中)上面的activity都清空,必须和FLAG_ACTIVITY_NEW_TASK一起使用。

3、FLAG_ACTIVITY_CLEAR_TASK:清除task中存在的activity,在把新启动的activity做为空task中的根activity,必须和FLAG_ACTIVITY_NEW_TASK一起使用。

一、FLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_NEW_TASK

Intent mIntent = new Intent(context, b.class);mIntent.putExtras(bundle);mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mIntent);

例如有四个activity A B C D,他们中都有一个按钮,按a的按钮会跳到b,b->c,c->d,d->b,如果activity d中的intent设置了以上两个属性

Intent intent=new Intent(getApplicationContext(), ActivityB.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);则当跳转到b后b上面的c d两个activity的给clear了,且生成了一个新的队列,该栈以b为开始,a本来就在b下面没清空与b一同处于新队列中,此时按返回按钮会跳转到a,再次按返回就会退出程序。如果没设这两个属性,则到了b后按返回按钮后不会跳转到a因为此时栈中,b处于栈顶,其次是d-->c-->b-->a,按照这个顺序先到d再到c再到b再到a,会出现非常奇怪且复杂的层次结构。

二、FLAG_ACTIVITY_CLEAR_TASK|FLAG_ACTIVITY_NEW_TASK

如果在调用Context.startActivity时传递这个标记,将会导致任何用来放置该activity的已经存在的task里面的已经存在的activity先清空,然后该activity再在该task中启动,也就是说,这个新启动的activity变为了这个空task中的根activity.所有老的activity都结束掉。

以上均为个人理解,错误在所难免,如有不对欢迎拍砖辞教。

借鉴:http://my.oschina.net/u/1015229/blog/169964

        http://laokaddk.blog.51cto.com/368606/1363827

0 0