androidactivity的通信
1. android activity間通訊,跳轉回主activity時總會刷新,如何才能不刷新
正常的回退操作不會對activity刷新。除非你在onresume,或onrestart等方法中進行了界面操作,因為跳轉回activity是,會執行onresume或onrestart->onstart()->onresume()生命周期。
當然,除此之外還有其他多種可能,要看你的代碼而定,如調用startActivityforresult進行跳轉,
在接收onactivityresult()方法中處理了ui.
還有可能你進行跳轉後,你的主activity被回收了,你返回的是一個新的Activity,這和你的activity設置有關。
2. Android 如何實現Activity與Activity之間持續通信。
java">XXXService
{
publicstaticfinalStringACTION_MESSAGE="message";
onStartCommand(xxx){
//yourlogicalxxx
sendBroadcastReceiver(newIntentFilter(ACTION_MESSAGE))
}
}
XXXActivity{
BroadcastReceiverreceiver=newBroadcastReceiver{
onReceive(context,intent){
if(XXXService.ACTION_MESSAGE.equals(intent.getAction())){
doSomething();
}
}
}
onCreate(){
//xxx
registerReceiver(receiver,newIntentFilter(XXXService.ACTION_MESSAGE));
}
onPause(){
unreigsterReceiver(receiver);
}
publicvoiddoSomething(){
xxx;
}
}
3. 安卓,兩個正在運行的activity之間如何通信
用Bundle 或者Intent的時候帶參數過去,也可以用一個類進行通信
4. Android中activity與service的通信問題,綁定service不能用!pass掉
如果你的設計中服務時單獨的進程那這種只能綁定,,而且這種是做聊天應用的普遍做法,好處多多,但是你非要說綁定麻煩那你就只做成同一個進程的本地服務了,
這樣只需要注冊回調就可以了。
至於你說的全局靜態變數很不推薦,一是很多地方使用更改以後出了問題根本沒辦法找到錯誤尤其是多線程操作情況,並且跨進程這全局靜態變數也是沒辦法跨進程訪問的
5. android 四大組件是怎麼通訊的
底層採用tcp/ip協議通訊,各個模塊之間是弱耦合
6. android兩個activity之間怎麼傳遞數據
Activity之間是沒有辦法直接傳遞數據的。Android的設計原則是,用Intent在不同的Activity和進程之間進行通信,但是通常來講,Intent中只能存入基本數據類型和系統默認支持的比如Uri之類的。那麼對於用戶自己定義的數據結構是無法直接用Intent來傳送的,如果想要通過Intent來傳遞自定義數據,可以讓數據結構實現Parcelable介面,這樣就可以把數據放入Intent。但是Intent的傳送效率也不是很高,特別是當傳遞一些如Bitmap的大數據,用Intent傳遞超過500K的Bitmap,就會造成Framework層的Java Binder掛掉,結果就是傳遞不成功。
這點可以算成是Android的一個弊端,沒有很好的解決方案。能做到的就是盡量設計的時候注意,盡量讓Activity之間共享基本數據類型。
Android本身的應用中也深受其害,可以看到有很多應用程序的源代碼中的主要的類在三千行以上的不在少數,比如Browser中的BrowserActivity有四千多行;Mms中的ComposeMessageActivity也有四千多行,等等。為什麼一個類會如此之大,就是因為它們是程序的主頁面,是業務的核心邏輯所在,裡面也控制著很多的其他的數據結構,而又無法與另外的Activity共享,所以就只能在一個Activity裡面做所的事情。
7. Android activity與fragment之間通信的好的方法有哪些
在fragment裡面有個重寫的onAttach方法,可以引用到對應的父Activity。另外,可以用介面實現他們之間的數據交互,還可以寫成公共靜態方法,直接用類名調用。需要靈活處理。
8. Android 進程間通信的幾種實現方式
Android 進程間通信的幾種實現方式
主要有4種方式:
這4種方式正好對應於android系統中4種應用程序組件:Activity、Content Provider、Broadcast和Service。
主要實現原理:
由於應用程序之間不能共享內存。為了在不同應用程序之間交互數據(跨進程通訊),AndroidSDK中提供了4種用於跨進程通訊的方式進行交互數據,實現進程間通信主要是使用sdk中提供的4組組件根據實際開發情況進行實現數據交互。
詳細實現方式:
Acitivity實現方式
Activity的跨進程訪問與進程內訪問略有不同。雖然它們都需要Intent對象,但跨進程訪問並不需要指定Context對象和Activity的 Class對象,而需要指定的是要訪問的Activity所對應的Action(一個字元串)。有些Activity還需要指定一個Uri(通過 Intent構造方法的第2個參數指定)。 在android系統中有很多應用程序提供了可以跨進程訪問的Activity,例如,下面的代碼可以直接調用撥打電話的Activity。
IntentcallIntent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:12345678");
startActivity(callIntent);Content Provider實現方式
Android應用程序可以使用文件或SqlLite資料庫來存儲數據。Content Provider提供了一種在多個應用程序之間數據共享的方式(跨進程共享數據)
應用程序可以利用Content Provider完成下面的工作
1. 查詢數據
2. 修改數據
3. 添加數據
4. 刪除數據
Broadcast 廣播實現方式
廣播是一種被動跨進程通訊的方式。當某個程序向系統發送廣播時,其他的應用程序只能被動地接收廣播數據。這就象電台進行廣播一樣,聽眾只能被動地收聽,而不能主動與電台進行溝通。在應用程序中發送廣播比較簡單。只需要調用sendBroadcast方法即可。該方法需要一個Intent對象。通過Intent對象可以發送需要廣播的數據。
Service實現方式
常用的使用方式之一:利用AIDL Service實現跨進程通信
這是我個人比較推崇的方式,因為它相比Broadcast而言,雖然實現上稍微麻煩了一點,但是它的優勢就是不會像廣播那樣在手機中的廣播較多時會有明顯的時延,甚至有廣播發送不成功的情況出現。
注意普通的Service並不能實現跨進程操作,實際上普通的Service和它所在的應用處於同一個進程中,而且它也不會專門開一條新的線程,因此如果在普通的Service中實現在耗時的任務,需要新開線程。
要實現跨進程通信,需要藉助AIDL(Android Interface Definition Language)。Android中的跨進程服務其實是採用C/S的架構,因而AIDL的目的就是實現通信介面。
總結
跨進程通訊這個方面service方式的通訊遠遠復雜於其他幾種通訊方式,實際開發中Activity、Content Provider、Broadcast和Service。4種經常用到,學習過程中要對沒種實現方式有一定的了解。
