<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                下面來分析當應用進程收到廣播后的處理流程,以動態接收者為例。 1. ApplicationThreadscheduleRegisteredReceiver函數分析 如前所述,AMS將通過scheduleRegisteredReceiver函數將廣播交給應用進程,該函數代碼如下: **ActivityThread.java::scheduleRegisteredReceiver** ~~~ public voidscheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent, intresultCode, String dataStr, Bundle extras, boolean ordered, boolean sticky) throws RemoteException { //又把receiver對象傳了回來。還記得注冊時傳遞的一個IIntentReceiver類型 //的對象嗎? receiver.performReceive(intent,resultCode, dataStr, extras, ordered,sticky); } ~~~ 就本例而言,receiver對象的真實類型為LoadedApk.ReceiverDispatcher,來看它的performReceive函數,代碼如下: **LoadedApk.java::performReceive** ~~~ public void performReceive(Intent intent, intresultCode, Stringdata, Bundle extras, boolean ordered, boolean sticky) { //Args是一個runnable對象 Args args= new Args(intent, resultCode, data, extras, ordered, sticky); // mActivityThread是一個Handler,還記得SDK提供的兩個同名的registerReceiver //函數嗎?如果沒有傳遞Handler,則使用主線程的Handler。 if(!mActivityThread.post(args)) { if(mRegistered && ordered) { IActivityManager mgr = ActivityManagerNative.getDefault(); args.sendFinished(mgr); } } } ~~~ scheduleRegisteredReceiver最終向主線程的Handler投遞了一個Args對象,這個對象的run函數將在主線程中被調用。 2. Args.run分析 **LoadedApk.java::Args.run** ~~~ publicvoid run() { finalBroadcastReceiver receiver = mReceiver; final boolean ordered = mOrdered; finalIActivityManager mgr = ActivityManagerNative.getDefault(); finalIntent intent = mCurIntent; mCurIntent = null; ...... try { //獲取ClassLoader對象,千萬注意,此處并沒有通過反射機制創建一個廣播接收者, //對于動態接收者來說,在注冊前就已經創建完畢 ClassLoadercl = mReceiver.getClass().getClassLoader(); intent.setExtrasClassLoader(cl); setExtrasClassLoader(cl); receiver.setPendingResult(this);//設置pendingResult //調用該動態接收者的onReceive函數 receiver.onReceive(mContext, intent); }...... //調用finish完成工作 if(receiver.getPendingResult() != null) finish(); } ~~~ Finish的代碼很簡單,此處不在贅述,在其內部會通過sendFinished函數調用AMS的finishReceiver函數,以通知AMS。 3. AMS的finishReceiver函數分析 不論ordered還是非orded廣播,AMS的finishReceiver函數都會被調用,它的代碼如下: **ActivityManagerService.java::finishReceiver** ~~~ public void finishReceiver(IBinder who, intresultCode, String resultData, Bundle resultExtras, boolean resultAbort) { ...... booleandoNext; final long origId =Binder.clearCallingIdentity(); synchronized(this){ //判斷是否還需要繼續調度后續的廣播發送 doNext = finishReceiverLocked( who, resultCode, resultData, resultExtras, resultAbort, true); } if(doNext) { //發起下一次廣播發送 processNextBroadcast(false); } trimApplications(); Binder.restoreCallingIdentity(origId); } ~~~ 由以上代碼可知,finishReceiver將根據情況調度下一次廣播發送。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看