Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android4.4 framework分析——廣播的注冊(BroadcastReceiver)和發送(sendbroadcast)過程分析

Android4.4 framework分析——廣播的注冊(BroadcastReceiver)和發送(sendbroadcast)過程分析

編輯:關於Android編程

在Android應用程序框架中,Activity和Service類都繼承了ContextWrapper類,因此,我們可以在Activity或者Service的子類中調用registerReceiver函數來注冊廣播接收器。

下圖是在activity中注冊廣播的過程:

\

 

step1~step3,就是一般的調用過程。

step4,registerReceiverInternal()方法如下:

 

    private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,
            IntentFilter filter, String broadcastPermission,
            Handler scheduler, Context context) {
        IIntentReceiver rd = null;
        if (receiver != null) {
            if (mPackageInfo != null && context != null) {
                if (scheduler == null) {
                    scheduler = mMainThread.getHandler();
                }
                rd = mPackageInfo.getReceiverDispatcher(
                    receiver, context, scheduler,
                    mMainThread.getInstrumentation(), true);
            } else {
                if (scheduler == null) {
                    scheduler = mMainThread.getHandler();
                }
                rd = new LoadedApk.ReceiverDispatcher(
                        receiver, context, scheduler, null, true).getIIntentReceiver();
            }
        }
        try {
            return ActivityManagerNative.getDefault().registerReceiver(
                    mMainThread.getApplicationThread(), mBasePackageName,
                    rd, filter, broadcastPermission, userId);
        } catch (RemoteException e) {
            return null;
        }
    }

scheduler傳下的是null,scheduler = mMainThread.getHandler();將獲得H的對象mH,用於後續broadcast的發送。

 

 

step6,先從已有的注冊列表mReceivers中查找是否由相同的ReceiverDispatcher,若之前沒有注冊過,則new一個ReceiverDispatcher,並記錄在mReceivers中,ReceiverDispatcher創建過程中,同時生成一個InnerReceiver,InnerReceiver用於接收處理sendBroadcast發過來的廣播。

 

step9~step11,通過binder訪問ActivityManagerService的registerReceiver,將廣播接收器receiver保存起來。

 

 

下圖是廣播發送(sendBroadcast)的過程:

\

 

 

 

右鍵復制圖片地址,在浏覽器中打開即可查看大圖。

未完待續,有不對的地方,請指正。


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