最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Android開(kāi)發(fā)學(xué)習(xí)教程(29)- Android BroadcastReceiver(廣播)

2023-01-30 01:09 作者:ChatGPT云炬學(xué)長(zhǎng)  | 我要投稿

—— 今朝有心苦勤奮,明朝一舉步青云。

Broadcast?receiver是什么

Broadcast receiver(廣播接收器)是一個(gè)Android 組件,它允許你注冊(cè)系統(tǒng)或應(yīng)用程序事件。一旦該事件發(fā)生,Android 運(yùn)行時(shí)會(huì)通知所有已注冊(cè)的事件接收者。舉個(gè)簡(jiǎn)單的例子,這就好比在學(xué)校里,當(dāng)訓(xùn)導(dǎo)主任廣播尋找王小明時(shí),訓(xùn)導(dǎo)主任只需要告知要找的是幾年幾班的王小明(不用知道他在哪里),盡管全校的同學(xué)都會(huì)聽(tīng)到這則廣播,但會(huì)去訓(xùn)導(dǎo)處報(bào)到的,就只有王小明。在android?中,我們時(shí)常需要利用此一機(jī)制,讓程序能在任何時(shí)候,對(duì)于不同的廣播訊息做出正確的反饋。例如,當(dāng)注冊(cè)了 ACTION_BOOT_COMPLETED廣播后,一旦 Android 系統(tǒng)完成啟動(dòng)過(guò)程程序的廣播接收器就會(huì)收到響應(yīng)。

Broadcast receiver的生命周期

廣播的生命周期并不像 Activity 一樣復(fù)雜,廣播的生命周期從調(diào)用開(kāi)始到onReceiver執(zhí)行完畢結(jié)束,需要注意的是,一般廣播的生命周期都極短,需要在10s內(nèi)處理完onReceiver中的所有工作,所以,一般不進(jìn)行耗時(shí)長(zhǎng)的工作,如果有耗時(shí)長(zhǎng)的工作,應(yīng)當(dāng)通過(guò)Intent傳遞給Service進(jìn)行處理。(注意,不要在onReceiver中開(kāi)啟線程進(jìn)行耗時(shí)任務(wù)處理,否則,在10s后,該線程會(huì)變成空線程,從而導(dǎo)致任務(wù)的丟失。同樣的,也不要使用bindService來(lái)綁定服務(wù)。)

值得注意的是,如果是在代碼中動(dòng)態(tài)注冊(cè)的廣播,如:在Activity注冊(cè),那么在Activity的onDestory中需要使用unregisterReceiver注銷廣播。

Broadcast receiver的用法

可以通過(guò) AndroidManifest.xml 文件注冊(cè)廣播接收器,除了這種靜態(tài)注冊(cè),還可以通過(guò)該 Context.registerReceiver() 方法動(dòng)態(tài)注冊(cè)廣播接收器。接收器的實(shí)現(xiàn)類需要實(shí)現(xiàn) BroadcastReceiver接口。如果廣播接收器注冊(cè)的事件發(fā)生,onReceive() Android系統(tǒng)調(diào)用接收器的方法,

1. 靜態(tài)注冊(cè)廣播

靜態(tài)注冊(cè)一個(gè)飛行模式變化的廣播

1
2
3
4
5
6
<receiver?android:name=".MyScreenReceiver"?>
????<intent-filter>
????????<action?android:name="android.intent.action.AIRPLANE_MODE"?/>
????</intent-filter>
</receiver>

創(chuàng)建一個(gè)BroadcastReceiver廣播接收器

1
2
3
4
5
6
7
8
9
public?class?MyScreenReceiver?extends?BroadcastReceiver {
??@Override
??public?void?onReceive(Context context, Intent intent) {
??????Log.d("hel->",?"飛行模式發(fā)生了變化...");
??}
}

當(dāng)開(kāi)啟飛行模式或者關(guān)閉飛行模式時(shí)onReceive方法響應(yīng)。

1. 動(dòng)態(tài)注冊(cè)廣播

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public?class?MainActivity?extends?AppCompatActivity {
????private?AirplaneModeChangeReceiver receiver;
????@Override
????protected?void?onCreate(Bundle savedInstanceState) {
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_main);
????????findViewById(R.id.btn2).setOnClickListener(new?View.OnClickListener() {
????????????@Override
????????????public?void?onClick(View v) {
????????????????receiver =?new?AirplaneModeChangeReceiver();
????????????????IntentFilter filter =?new?IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
????????????????registerReceiver(receiver, filter);
????????????}
????????});
????}
????@Override
????protected?void?onDestroy() {
????????super.onDestroy();
????????unregisterReceiver(receiver);
????}
}

源碼鏈接:https://yunjunet.cn/876829.html

Android開(kāi)發(fā)學(xué)習(xí)教程(29)- Android BroadcastReceiver(廣播)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
禄劝| 博白县| 天台县| 普洱| 甘洛县| 吴江市| 元氏县| 四平市| 格尔木市| 二手房| 寿光市| 东丰县| 万州区| 宁都县| 抚州市| 宁化县| 淮安市| 广汉市| 宜阳县| 呼伦贝尔市| 嘉定区| 辉南县| 叶城县| 蕲春县| 宁乡县| 寿阳县| 五峰| 遂溪县| 卢湾区| 赞皇县| 通河县| 阿拉尔市| 绥阳县| 鄂伦春自治旗| 驻马店市| 右玉县| 娄底市| 平泉县| 九江县| 金阳县| 深圳市|