編輯:Android開發教程
一、 BroadcastReceiver簡介
BroadcastReceiver,用於異步接收廣播Intent,廣播Intent是通過調用 Context.sendBroadcast()發送、BroadcastReceiver()接收。
廣播Intent的發送是通過調用Context.sendBroadcast()、 Context.sendOrderedBroadcast()、Context.sendStickyBroadcast()來實現的。通常一個廣播Intent可以被訂閱了此Intent的 多個廣播接收者所接收,廣播接收者和JMS中的Topic消息接收者很相似。
廣播接收器只能接收廣播,對廣播的通知做出反應 ,很多廣播都產生於系統代碼,如:時區改變的通知、電池電量不足、用戶改變了語言偏好,或者開機啟動等
廣播接收器沒 有用戶界面,但是它可以為它們接收到信息啟動一個Activity或者使用NotificationManager來通知用 戶.
BroadcastReceiver 接收廣播方式:
1. Normal broadcasts(正常廣播),用 Context.sendBroadcast()發送是 完全異步的,它們都運行在一個未定義的順序,通常是在同一時間。這樣會更有效,但意味著receiver不能包含所要使用的結果 或中止的API。
2. Ordered broadcasts(有序廣播),用 Context.sendOrderedBroadcast()發送每次被發送到一個 receiver。所謂有序,就是每個receiver執行後可以傳播到下一個receiver,也可以完全中止傳播——不傳播給其他receiver。 而receiver運行的順序可以通過matched intent-filter 裡面的android:priority來控制,當priority優先級相同的時候, Receiver以任意的順序運行。
二、 BroadcastReceiver注冊方式
1 靜態注冊
AndroidManifest.xml中, application裡面,定義receiver並設置要接收的action
<receiver android:name=".receiver.MusicReceiver" > <intent-filter> <action android:name="com.homer.receiver.musicReceiver" /> </intent-filter> </receiver>
2 動態注冊
Activity中,需在onStart()中調用registerReceiver()進行注冊和在onStop 中調用unregisterReceiver()釋放服務
private MusicReceiver receiver; @Override protected void onStart(){ super.onStart(); receiver = new MusicReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("com.homer.receiver.musicReceiver"); this.registerReceiver(receiver, filter); } @Override protected void onStop(){ this.unregisterReceiver(receiver); super.onStop(); }
3 兩種注冊方式的比較
靜態注冊方式,由系統來管理receiver,而且程序裡的所有receiver,可以在xml裡面一目 了然
動態注冊方式,隱藏在代碼中,比較難發現;需要特別注意的是,在退出程序前要記得調用 Context.unregisterReceiver()方法。一般在activity的onStart()裡面進行注冊, onStop()裡面進行注銷。官方提醒,如果在 Activity.onResume()裡面注冊了,就必須在Activity.onPause()注銷。
三、 BroadcastReceiver生命周期
一個 BroadcastReceiver 對象只有在被調用onReceive(Context, Intent)的才有效,當從該函數返回後,該對象就無效的了,結束生 命周期。
因此從這個特征可以看出,在所調用的onReceive(Context, Intent)函數裡,不能有過於耗時的操作,不能使用線 程來執行。對於耗時的操作,應該在startService中來完成。因為當得到其他異步操作所返回的結果時,BroadcastReceiver 可 能已經無效了。
這篇文章算是對整個引導界面開發專題的一個終結了吧,個人覺得大部分的引導界面基本上都是千篇一律 的,只要熟練掌握了一個,基本上也就沒什麼好說的了,要是在今後的開發中遇到了
通過討論這個問題,我們能夠見識到google是對面向對象模式的理解,能夠理解android底層的一些調用。 這也是一道很常見的面試題。我們這篇文章就來解決這四個問題:An
Gallery可以顯示一系列的圖片,並且可以橫向滑動。下面展示如何使用Gallery去顯示一系列的圖片。1. 創建一個工程,Gallery。2. main.xml中的代碼
博主思來想去,覺得還是想把這個教程寫的再細一點,讓讀者能夠更清楚的了解LibGDX這個游戲引擎整體 的架構,所以也就總結出了這樣一篇文章。一、模塊概述作為游戲開發人員,我