您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
02 消息訂閱與發布和eventbus(android broadreceiver 運行在哪個進程)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-11 05:12:25【】1人已围观
简介er,并注冊到系統中。之前常說:靜態注冊的廣播接收器即使app已經退出,主要有相應的廣播發出,依然可以接收到,但此種描述自Android3.1開始有可能不再成立,具體分析詳見本文后面部分。
之前常說:靜態注冊的廣播接收器即使app已經退出,主要有相應的廣播發出,依然可以接收到,但此種描述自Android 3.1開始有可能不再成立,具體分析詳見本文后面部分。
2).動態注冊:
動態注冊時,無須在AndroidManifest中注冊<receiver/>組件。直接在代碼中通過調用Context的registerReceiver函數,可以在程序中動態注冊BroadcastReceiver。registerReceiver的定義形式如下:
1 registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
2 registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheler)
典型的寫法示例如下:
1 public class MainActivity extends Activity {
2 public static final String BROADCAST_ACTION = "買粉絲.example.買粉絲rn";
3 private BroadcastReceiver mBroadcastReceiver;
4
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_main);
9
10 mBroadcastReceiver = new MyBroadcastReceiver();
11 IntentFilter intentFilter = new IntentFilter();
12 intentFilter.addAction(BROADCAST_ACTION);
13 registerReceiver(mBroadcastReceiver, intentFilter);
14 }
15
16 @Override
17 protected void onDestroy() {
18 super.onDestroy();
19 unregisterReceiver(mBroadcastReceiver);
20 }
21
22 }
注:Android中所有與觀察者模式有關的設計中,一旦涉及到register,必定在相應的時機需要unregister。因此,上例在onDestroy()回到中需要unregisterReceiver(mBroadcastReceiver)。
當此Activity實例化時,會動態將MyBroadcastReceiver注冊到系統中。當此Activity銷毀時,動態注冊的MyBroadcastReceiver將不再接收到相應的廣播。
3.廣播發送及廣播類型
經常說”發送廣播“和”接收“,表面上看廣播作為Android廣播機制中的實體,實際上這一實體本身是并不是以所謂的”廣播“對象存在的,而是以”意圖“(Intent)去表示。定義廣播的定義過程,實際就是相應廣播”意圖“的定義過程,然后通過廣播發送者將此”意圖“發送出去。被相應的BroadcastReceiver接收后將會回調onReceive()函數。
下段代碼片段顯示的是一個普通廣播的定義過程,并發送出去。其中setAction(..)對應于BroadcastReceiver中的intentFilter中的action。
1 Intent intent = new Intent();
2 intent.setAction(BROADCAST_ACTION);
3 intent.putExtra("name", "qqyumidi");
4 sendBroadcast(intent);
根據廣播的發送方式,可以將其分為以下幾種類型:
1.Normal Broadcast:普通廣播
2.System Broadcast: 系統廣播
3.Ordered broadcast:有序廣播
4.Sticky Broadcast:粘性廣播(在 android 5.0/api 21中deprecated,不再推薦使用,相應的還有粘性有序廣播,同樣已經deprecated)
5.Local Broadcast:App應用內廣播
下面分別總結下各種類型的發送方式及其特點。
1).Normal Broadcast:普通廣播
此處將普通廣播界定為:開發者自己定義的intent,以買粉絲ntext.sendBroadcast_"AsUser"(intent, ...)形式。具體可以使用的方法有:
sendBroadcast(intent)/sendBroadcast(intent, receiverPermission)/sendBroadcastAsUser(intent, userHandler)/sendBroadcastAsUser(intent, userHandler,receiverPermission)。
普通廣播會被注冊了的相應的感興趣(intent-filter匹配)接收,且順序是無序的。如果發送廣播時有相應的權限要求,BroadCastReceiver如果想要接收此廣播,也需要有相應的權限。
2).System Broadcast: 系統廣播
Android系統中內置了多個系統廣播,只要涉及到手機的基本操作,基本上都會發出相應的系統廣播。如:開啟啟動,網絡狀態改變,拍照,屏幕關閉與開啟,點亮不足等等。每個系統廣播都具有特定的intent-filter,其中主要包括具體的action,系統廣播發出后,將被相應的BroadcastReceiver接收。系統廣播在系統內部當特定事件發生時,有系統自動發出。
3)Ordered broadcast:有序廣播
有序廣播的有序廣播中的“有序”是針對廣播接收者而言的,指的是發送出去的廣播被BroadcastReceiver按照先后循序接收。有序廣播的定義過程與普通廣播無異,只是其的主要發送方式變為:sendOrderedBroadcast(intent, receiverPermission, ...)。
對于有序廣播,其主要特點總結如下:
1>多個具當前已經注冊且有效的BroadcastReceiver接收有序廣播時,是按照先后順序接收的,先后順序判定標準遵循為:將當前系統中所有有效的動態注冊和靜態注冊的BroadcastReceiver按照priority屬性值從大到小排序,對于具有相同的priority的動態廣播和靜態廣播,動態廣播會排在前面。
2>先接收的BroadcastReceiver可以對此有序廣播進行截斷,使后面的BroadcastReceiver不再接收到此廣播,也可以對廣播進行修改,使后面的BroadcastReceiver接收到廣播后解析得到錯誤的參數值。當然,一般情況下,不建議對有序廣播進行此類操作,尤其是針對系統中的有序廣播。
4)Sticky Broadcast:粘性廣播(在 android 5.0/api 21中deprecated,不再推薦使用,相應的還有粘性有序廣播,同樣已經deprecated)。
既然已經deprecated,此處不再多做總結。
5)Local Broadcast:App應用內廣播(此處的App應用以App應用進程為界)
由前文闡述可知,Android中的廣播可以跨進程甚至跨App直接通信,且注冊是exported對于有intent-filter的情況下默認值是true,由此將可能出現安全隱患如下:
1.其他App可能會針對性的發出與當前App intent-filter相匹配的廣播,由此導致當前App不斷接收到廣播并處理;
2.其他App可以注冊與當前App一致的intent-filter用于接收廣播,獲取廣播具體信息。
無論哪種情形,這些安全隱患都確實是存在的。由此,最常見的增加安全性的方案是:
1.對于同一App內部發送和接收廣播,將exported屬性人為設置成false,使得非本App內部發出的此廣播不被接收;
2.在廣播發送和接收時,都增加上相應的permission,用于權限驗證;
3.發送廣播時,指定特定廣播接收器所在的包名,具體是通過intent.setPackage(packageName)指定在,這樣此廣播將只會發送到此包中的App內與之相匹配的有效廣播接收器中。
App應用內廣播可以理解成一種局部廣播的形式,廣播的發送者和接收者都同屬于一個App。實際的業務需求中,App應用內廣播確實可能需要用到。同時,之所以使用應用內廣播時,而不是使用全局廣播的形式,更多的考慮到的是Android廣播機制中的安全性問題。
相比于全局廣播,App應用內廣播優勢體現在:
1.安全性更高;
2.更加高效。
為此,Android v4兼容包中給出了封裝好的LocalBroadcastManager類,用于統一處理App應用內的廣播問題,使用方式上與通常的全局廣播幾乎相同,只是注冊/取消注冊廣播接收器和發送廣播時將主調買粉絲ntext變成了LocalBroadcastManager的單一實例。
代碼片段如下:
很赞哦!(4)
相关文章
- 02 外地車去上海胸科醫院怎么走(醫保卡到底怎么報銷?)
- 02 外地孩子在上海讀幼兒園需要什么條件(現在外地子女在上海讀幼兒園需要什么條件)
- 02 外地燃油車上海限行新規(純燃油車退出市場的時間僅剩5年?)
- 01 水果蛋糕2023款網紅款(2023必吃榜抖音人氣網紅美食評選)
- 02 外經貿從業人員考試中心是教育部門嗎(全國外經貿從業人員考試證書有用嗎?國家承認嗎?)
- 01 汕頭市華盛貿易有限公司 奶粉(青島宏華盛貿易有限責任公司怎么樣?)
- 02 外地老人投靠上海子女補貼(上海外地戶籍老人投靠子女退休金是否按照上海標準)
- 02 外地車牌怎么進上海限行區(外地牌照能進上海市區嗎)
- 01 汕頭市新華汽車貿易有限公司(汕頭市嘉迪駿汽車貿易有限公司電話是多少?)
- 02 外地學生在上海中考需要哪些條件(外地學生在上海中考需要哪些條件)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片
职业:程序员,设计师
现居:贵州黔东南锦屏县
工作室:小组
Email:[email protected]
热门文章
站长推荐
02 外地幼兒園轉上海幼兒園(我是外地戶口,孩子在老家上的幼兒園,現在想把孩子接到上海來上小學,不知道行不行,需要什么條件嗎)
02 外地戶口孩子在上海上幼兒園(外地小孩在上海上學需要什么條件)
01 汕頭市易達貿易有限公司(拆解報廢汽車需要辦理什么證件)
01 汕頭市鮀品貿易有限公司官網(鮀品鞋子是什么牌子?)
01 漢庭上海外灘白渡橋店(漢庭灑店外白渡橋店到迪士尼地鐵怎么走)
02 外地小孩落戶上海政策(父親是上海的,母親是外地的,小孩上戶口有什么要求嗎)
02 外經貿大學排名全國第幾(武漢紡織大學外經貿學院是幾本 學生評價怎么樣好不好(10條))
02 外地戶口孩子在上海上學政策2023(2023年外地人在上海買房條件有哪些)