Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習之路--四大組件--BroadCastReceiver

Android學習之路--四大組件--BroadCastReceiver

編輯:關於Android編程

四大組件

Activity BroadCastReceiver Service ContentProvider

在開發中,我們經常會遇到這麼一種情況,別處處理了一大堆事情,但是處理的結果要通知另一處的程序,另一處接受到這個處理結果在繼續往下做一些事情。或者說我們要監聽一些系統的一些狀態,比如說網絡的變化,電量的變化等等。這是我們就可以用安卓的四大組件之一————廣播來完成我們需要的功能。

BroadCastReceiver—廣播

廣播在用時需要在程序裡進行注冊,然後我們才能用。注冊它有倆中方法,一種是靜態注冊,而是動態注冊


靜態注冊

靜態注冊就是在manifest裡寫好了廣播程序,在設置成程序開機xie的時候將廣播開啟,然後我們在廣播的接受方法裡接收廣播信息即可。如:

1.自定義我們的廣播,繼承BroadCastReceiver

public class TestBroadCastReceive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent!= null) {
            if("myAction".equals(intent.getAction())) {
                Log.i("info", intent.getStringExtra("data"));
            }
        }
    }
}

2.manifest配置


     
     
         
     

3.java程序發送廣播

private void sendBroad(){
    Intent i = new Intent();
    i.setAction("myAction");
    i.putExtra("data","這是我發的信息");
    sendBroadcast(i);
}

在某處調用這個方法,我們在日志當中就可以看到我們發的信息。

.473 2667-2667/com.android.app I/info: 這是我發的信息

在這裡我們看到要用的到的倆個配置屬性,,是過濾器中。在裡面的加的是我們要接受匹配的東西,不一樣的我不管,我不接收。這個先了解即可,後面我們在詳解。

靜態廣播注冊後,就是和手機一起走了,手機光機了,它才停止,手機開啟了,它就啟動了。生命周期是一直存在的,一直處於候命狀態。這樣當我們就需要一些廣播,處理完就沒事了,不想在用了,如果用這種方式,耗費資源還不說還費電。那我們就可以用第二種動態廣播來實現。靜態是注冊後不管,而動態則你可以隨時管理我們的廣播。廢話不多說,進入主題。


動態廣播
上面說了動態廣播的好處,那我們直接貼代碼。

1.廣播還是那個廣播,我們不動。

2.在程序啟動後,注冊

private void register() {
    broadcast = new TestBroadCastReceive();
    IntentFilter filter= new IntentFilter();
    filter.addAction("myAction");
    registerReceiver(broadcast,filter);
}

3.發送廣播

private void sendBroad(){
    Intent i = new Intent();
    i.setAction("myAction");
    i.putExtra("data","這是我發的信息,動態的");
    sendBroadcast(i);
}

打印日志:

.902 12265-12265/com.android.app I/info: 這是我發的信息,動態的

動態的廣播注冊後,當我們退出當前注冊頁面時候,記得要取消廣播,
unregisterReceiver(broadcast);否則會報錯:

android.app.IntentReceiverLeaked: Activity com.android.app.TestActivity has leaked IntentReceiver com.android.app.TestBroadCastReceive@a181781 that was originally registered here. Are you missing a call to unregisterReceiver()?                                                           

雖說不會影響我們的程序,但是會造成內存溢出情況。


當我們在注冊廣播是我們可以設置一個級別,

IntentFilter filter= new IntentFilter();
filter.addAction("myAction");
filter.setPriority(int);

設置級別越高,那麼它先去執行,級別越低,越最後執行,用這種做一些系統攔截了等等,級別相同,看系統心情喽。


以上我們介紹的都是普通的廣播,普通的廣播執行,都是無序的,你不設置優先級,都是系統隨意的滴用,也無法使用一些setResult的一些回調API。如果要用到這些東西,那就需要有序廣播和無序廣播了。有序廣播就是執行,Context.sendOrderedBroadcast,它去執行後,receiver都是有序的去執行,你可以用abortBroadcast來中止發送廣播,不往下傳。也可以用setResult去做一些回調。

廣播的生命周期,簡單來說就是創建,接收消息,銷毀這幾部。但是在這裡處理任務時都不能超過11s。否則就是ANR了。這點大家注意一下。

好了,廣播我們先介紹到這裡,接下來。我們在介紹一位重量級組件,Service,拭目以待。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved