Android Activity的启动模式

来源:互联网 发布:用友软件版本号 编辑:程序博客网 时间:2024/06/02 10:19



   
   总结下这两天的工作;
   1.工作遇到的问题
点击推送的通知打开应用后,按下home键。然后点击桌面上的应用图标启动应用。此时MainAcititvy又重新启动,而不是进入原来task的栈顶activity。
  2.问题原因
查找一晚上原因终于了解到是因为,在点击通知启动应用时,传给MainActivity的Intent少设置了一个值 正确的Intent的如下:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LUNCHER);
intent.setClass(context,class);
startActivity(intent);

3.问题延伸
之所以会出现这个问题,是由于对activity的一些属性不熟悉。下面对Activity的启动模式,以及回退栈做一个总结
1) activity的启动模式
设置Activity的启动模式可以在Mainfast文件里activity标签里设置,也可以通过intent.setFlag()来设置。
①在Mainfast里设置:android:launchMode
"standard":默认的启动方式,如果设置此模式,此activity可以在Task里存在多个实例。也就是说当需要时系统会一直新建这个activity
"singleTop":当此task的顶部已经存在一个此activity的实例时,将不再创建而是将原来的intent传给它,来重新启动
"singleTask":系统会创建这个Activity作为一个新task的root,但是如果已经存在了这个activity的实例则不再创建,
"singleInstance":系统将不会在activity所在的task里创建新的activity的实例。也就是说这个activity所在的task只有次activity元素
②同过Intent.setFlag()设置

  • [url=]FLAG_ACTIVITY_NEW_TASK : 对应singleTask。启动activity在一个新的task。但如果已经有一个运行着此activity的task,则此task将被带到前台  来。[/url]
  • [url=]FLAG_ACTIVITY_CLEAR_TOP:如果此activity已经运行在一个回退栈里,将不会重新创建,而会将此activity之上的activity全部清理掉。让此activity回到栈顶[/url]
  • [url=]FLAG_ACTIVITY_SINGLE_TOP[/url][url=]:对应singleTop.[/url]

2)会退栈
①一个Application对应一个会退栈,通过对activity的启动模式的设置可以对activity所在的会退栈进行操作
②如果会退栈的root Activity 包含action: ACTION_MAIN 和category: CATEGORY_LAUNCHER ,当按下home键回到桌面时此task回到后台,当再次启动此root activity时系统将寻找此会退栈的栈顶activity并进入。(这里是解决上述问题的关键)
0 0
原创粉丝点击