Android BroadcastReceiver启动Activity中遇到的问题

来源:互联网 发布:中标软件 编辑:程序博客网 时间:2024/05/16 14:54

           最近在学习使用BroadcastReceiver来做一个推送的demo,但是在点开通知栏弹出activity这个环节 bug百出,没办法人蠢就是这样第一次写成功率不高。原因有两个:

 1.用隐式的方法启动Activity方法不对

           在<intent-filter>中并未声明<category>属性;

          原则上如果一个intent对象中没有种类(即种类字段为空)应该总是通过种类测试,而不管过滤器中有什么种类。但是有个例外,Android对待所有传递给 Context.startActivity()的 隐式intent它们至少包含"android.intent.category.DEFAULT"(对应CATEGORY_DEFAULT常量使得activity按照普通的activity启动)。 因此,活动想要接收隐式intent必须要在intent过滤器中包含"android.intent.category.DEFAULT“,也可以是"android.intent.category.LAUNCHER“(通常配合在action属性中将activity设置为程序入口来使用。

       2.在BroadcastReceiver中启动Activity没有设置flag

          在BroadcatReceiver中启动Activity时要按照下面的方法设置flag,大概的意思是要为新启动的Activity创建一个新的task队列和并且将队列中位于栈顶的全部移出。

          i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );

         为什么要这么做在源码中的解释是:

This is because,
 *   without being started from an existing Activity, there is no existing
 *   task in which to place the new activity and thus it needs to be placed
 *   in its own separate task.
       说白了就是如果不加这个flag就没有一个Task来存放新启动的Activity.

0 0
原创粉丝点击