Android BroadcastReceiver啓動Activity中遇到的問題

           最近在學習使用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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章