編輯:關於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的交互問題。
本章主要會講述如何在手機端使用HTTP協議和服務器端進行網絡交互,並對服務器返回的數據進行解析,這也是Android中最常使用到的網絡技術了,下面就讓我們一起來學習一下吧
簡介 Activity是Android應用程序組件,實現一個用戶交互窗口,我們可以實現布局填充屏幕,也可以實現懸浮窗口。一個app由很多個Actvitiy
Android6.0 SystemUI啟動簡析及圖標顯示刷新。Android系統的SystemUI包含狀態欄、導航欄、快捷設置、通知欄及鎖屏界面等等;主要流程是從Syst
java的數據類型分為基本數據類型和引用數據類型。 基本數據類型分為數值型、字符型(char)、布爾型(boolean) 數值型變量 1、整