android中LocalBroadcastManager使用

來源:互聯網
上載者:User

標籤:localbroadcastmanage   android   廣播   

      今天遇到一個acitivity之間通訊的問題,由於我們是用TabActivity包裹了Activity(我們稱之為A),所以這兩個Activity是同時存在的。當在TabActivity中啟動其他Activity處理一些業務,當業務處理完成時,通過onActivityResult()返回處理結果,我們需要根據返回的結果對A進行更新,但是現在問題就來了,我們怎麼來更新A呢?

      我發現TabActivity的onActivityResult()是在A的onResume之前執行的,也就是說,我可以在TabActivity裡做一些處理,在A執行onResume的時候來更新狀態,我首先想到的是通過SharedPreference,通過寫一個標識,讓A來讀取這個標識。但是這種方式顯然不能讓我們滿意,通過寫檔案來傳遞狀態並不是很好的做法。

      或者,我們可以通過廣播的形式來傳遞狀態,但是廣播的操作太重,作為一個app,不應該做這種系統級的操作,而且系統級的廣播還會帶來安全問題。一旦被其他應用捕獲就有可能被利用。

       最後,從同事那裡瞭解到有這麼個東西,可以幫我們解決這個問題:LocalBroadcastManager。

       它來自android 的support包,類名是android.support.v4.content.LocalBroadcastManager,是用來在同一個應用內的不同組件間發送Broadcast的,剛好與我們的情境相符合。同時,它發送的廣播只在app內傳播,不會泄漏到其他的應用,安全性也有了保證。而且它的使用方式很簡單,與普通的廣播類似。

       使用方式如下,在接收方也就是我們的A,這樣調用。

    ?    ?       BroadcastReceiver cameraPicBroadcastReceiver = new BroadcastReceiver() {

                   @Override

                   public void onReceive(Contextcontext, Intent intent) {

                       boolean isSuccess=intent.getExtras().getBoolean(MConstants.KEY_LOGIN_SUCESS);

    ?    ?    ?    ?    ?    ?.......//更新狀態

                   }

               };

               IntentFilter intentFilter = new IntentFilter( MConstants.KEY_INTENT_LOGIN_RESULT);

               final LocalBroadcastManager  localBroadcastManager = LocalBroadcastManager.getInstance(ctx);

               localBroadcastManager.registerReceiver(cameraPicBroadcastReceiver, intentFilter);

     廣播的發送方的寫法如下:

     ?    ?    ?    ?    ? Intent   loginSucessIntent = new Intent();

                      loginSucessIntent.setAction(MConstants.KEY_INTENT_LOGIN_RESULT);

                      loginSucessIntent.putExtra(MConstants.KEY_LOGIN_SUCESS, false);

                      LocalBroadcastManager.getInstance(context).sendBroadcast(loginSucessIntent);

 LocalBroadcastManager是單例的,使用方式很簡單,它還可以解決Service和Activity的互動問題。

 

android中LocalBroadcastManager使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.