當前位置:首頁 » 安卓系統 » android線程通信

android線程通信

發布時間: 2022-01-29 19:11:14

『壹』 android線程間數據傳遞問題。

如果你一定要同步繪圖的話,那你只有想辦法優化你的圖形處理演算法,使之更高效。非同步是比較推薦的方式吧,如果優化做不好的話。

『貳』 安卓有哪些核心機制比如怎麼實現網路的,進程間通信怎麼解決的,多線程怎麼實現的,內存管理是怎樣的

一般都是基於ARM處理器的吧
安卓的內核也是基於Linux的吧。
網路實現依靠TCP/IP協議棧實現實行封包和解包以及連接的建立和控制,還涉及到你手機的硬體網卡等。
進程間通信方式一般採用的消息隊列,共享內存,套接字,還有管道了。
多線程是由操作系統來管理每個線程的CPU時間和資源的分配。也是比較復雜的,涉及到線程間通信,線程同步等。
內存管理是由操作系統進行分段,分頁。分配機制比較復雜的,涉及到碎片的減少,內存的回收等。

要想了解詳細內容,可以看看Linux操作系統原理。或者google提供的相關文檔。

『叄』 android中什麼時候會選擇用廣播來進行線程間的通信

android中什麼時候會選擇用廣播來進行線程間的通信 Android 多線程 通信

線程中通信就不要用廣播了吧 進程中通信可以用廣播或者aidl

可是,這兩天看到的項目都是這么做的;然後,自己分析了下,覺得一下的理由也是可以成立的;

1.正常情況下我們選擇handler消息機制來進行單向的線程間的通信;(工作線程向主線程發送消息)

因為主線程有現成的handler,而工作線程沒有現成的handler,這樣的話,主線程將handler交給工作線程而讓工作線程將工作的結果交給主線程;

相反,工作線程中沒有現成的handler(事實上是沒有消息隊列,也就是handler沒有綁定到工作線程),那麼,如果開辟的話,代碼角度上是挺麻煩的(相對應廣播機制來說);

2.廣播機制本身就是雙向的(工作線程向主線程發送廣播,主線程向工作線程發送廣播);

//另外,對於像一個activity中通過fragment來進行界面的處理; 我們大多數情況下是採用廣播的機制來實現fragment中adapter的數據的更新;這樣做主要是考慮到工作線程的任務載入完成,而具體的對應刷新的activity可能還沒有啟動;

另外,基於介面隔離原則,如果用handler進行通信的話,則不能很好的滿足這一原則;

你要是周期比較長 用廣播好些吧

應該與周期關系不是很密切。最主要的原因是兩條線成是雙向通信。

Handler類似於P2P的通信。
廣播則類似於一個server端,用來處理分發不同線程的請求,從控制器的角度來說用廣播更好一點。

一般使用Handler的,多用於子線程處理事務,完成時告知主線程這一類的情況。
而類似樓主所說的多條線程之間需要頻繁交互的話,廣播是個很好的選擇,並且結構清晰,只是不知道廣播的性能與handler相比會怎麼樣。

『肆』 安卓多線程間通信和多進程之間通信有什麼不同

handler是android特有的機制,最大的好處就是實現了Activity主線程(就是UI主線程)和其他線程(自己定義的Thread)之間的數據通信。Timer和Thread是實現多線程的,而handler是實現線程間通信的,二者很大不同,關於handler的用法,參考搜索。。。

『伍』 線程間通信方式有哪些,進程間通信方式,兩個線程分別為生成/消費如何通信

您好:AIDL(Android Interface Definition Language)是一種介面定義語言,編譯器通過*.aidl文件的描述信息生成符合通信協議的Java代碼,我們無需自己去寫這段繁雜的代碼,只需要在需要的時候調用即可,通過這種方式我們就可以完成進程間的通信工作。Handler通俗一點講就是用來在各個線程之間發送數據的處理對象。在任何線程中,只要獲得了另一個線程的handler,則可以通過 handler.sendMessage(message)方法向那個線程發送數據。基於這個機制,我們在處理多線程的時候可以新建一個thread,這個thread擁有UI線程中的一個handler。當thread處理完一些耗時的操作後通過傳遞過來的handler像ui線程發送數據,由UI線程去更新界面。

『陸』 Android 線程間通信有哪幾種方式

Android 的廣播機制 在 Android 裡面有各種各樣的廣播,比如電池的使用狀態,電話的接收和簡訊的接收都會產生一個廣播,應用程序開發者也可以監聽這些廣播並做出程序邏輯的處理。下面我畫一張粗略的圖來幫助大家理解廣播的運行機制。 Android 中有各式各樣的廣播,各種廣播在Android 系統中運行,當系統/應用程序運行時便會向 Android 注冊各種廣播,Android 接收到廣播會便會判斷哪種廣播需要哪種事件,然後向不同需要事件的應用程序注冊事件,不同的廣播可能處理不同的事件也可能處理相同的廣播事件,這時就需要 Android 系統為我們做篩選。 案例分析: 一個經典的電話黑名單,首先通過將黑名單號碼保存在資料庫裡面,當來電時,我們接收到來電廣播並將黑名單號碼與資料庫中的某個數據做匹配,如果匹配的話則做出相應的處理,比如掛掉電話、比如靜音等等。。。 Demo 分析: 下面通過一個小DEMO 來講解一下廣播在Android 中如何編寫,在Demo中我們設置了一個按鈕為按鈕設置點擊監聽通過點擊發送廣播,在後台中接收到廣播並列印LOG信息。代碼如下: BroadCastActivity 頁面代碼 public class BroadCastActivity extends Activity { public static final String ACTION_INTENT_TEST = "com.terry.broadcast.test"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.Button01); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(ACTION_INTENT_TEST); sendBroadcast(intent); } }); } } 接收器代碼如下: public class myBroadCast extends BroadcastReceiver { public myBroadCast() { Log.v("BROADCAST_TAG", "myBroadCast"); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.v("BROADCAST_TAG", "onReceive"); } } Android 廣播的生命周期 在上面的接收器中,繼承了BroadcastReceiver 並重寫了它的onReceive 並構造了一個函數,下面通過圖片來一步一步認識 Android 廣播的生命周期。當我點擊一下按鈕,它向Android 發送了一個廣播,如下圖: 這時我們再點擊一下按鈕,它還是會再向 Android 系統發送廣播,此時日誌信息如下: 下面本人畫一張圖像,描述了Android 中廣播的生命周期,其次它並不像Activity 一樣復雜,運行原理很簡單如下圖: 下面來看一下SDK給出的解釋: 大意為:如果一個廣播處理完onReceive 那麼系統將認定此對象將不再是一個活動的對象,也就會finished掉它。 至此,大家應該能明白 Android 的廣播生命周期的原理,代碼也不用多介紹,很簡單的一個發送廣播並處理廣播的Demo。 Android 如何判斷並篩選廣播? 前 面說過 Android 的廣播有各式各樣,那麼Android 系統是如何幫我們處理我們需要哪種廣播並為我們提供相應的廣播服務呢?這里有一點需要大家注意,每實現一個廣播接收類必須在我們應用程序中的 manifest 中顯式的註明哪一個類需要廣播,並為其設置過濾器,如下圖: Tip:action 代表一個要執行的動作,在Andriod 中有很action 比如 ACTION_VIEW,ACTION_EDIT 那麼有些人會問了,如果我在一個廣播接收器中要處理多個動作呢?那要如何去處理? 在Android 的接收器中onReceive 以經為我們想到的,同樣的你必須在Intent-filter 裡面注冊該動作,可以是系統的廣播動作也可以是自己需要的廣播,之後你之需要在onReceive 方法中,通過intent.getAction()判斷傳進來的動作即可做出不同的處理,不同的動作。具體大家可以去嘗試測試一下。 小結: 在Android 中如果要發送一個廣播必須使用sendBroadCast 向系統發送對其感興趣的廣播接收器中。 使用廣播必須要有一個intent 對象必設置其action動作對象 使用廣播必須在配置文件中顯式的指明該廣播對象 每次接收廣播都會重新生成一個接收廣播的對象 在BroadCast 中盡量不要處理太多邏輯問題,建議復雜的邏輯交給Activity 或者 Service 去處理 Android廣播機制(兩種注冊方法) 在android下,要想接受廣播信息,那麼這個廣播接收器就得我們自己來實現了,我們可以繼承BroadcastReceiver,就可以有一個廣播接受器了。有個接受器還不夠,我們還得重寫BroadcastReceiver裡面的onReceiver方法,當來廣播的時候我們要干什麼,這就要我們自己來實現,不過我們可以搞一個信息防火牆。具體的代碼: public class SmsBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] object = (Object[])bundle.get("ps"); SmsMessage sms[]=new SmsMessage[object.length]; for(int i=0;i { sms[0] = SmsMessage.createFromP((byte[])object[i]); Toast.makeText(context, "來自"+sms[i].getDisplayOriginatingAddress()+" 的消息是:"+sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show(); } //終止廣播,在這里我們可以稍微處理,根據用戶輸入的號碼可以實現簡訊防火牆。 abortBroadcast(); } } 當實現了廣播接收器,還要設置廣播接收器接收廣播信息的類型,這里是信息:android.provider.Telephony.SMS_RECEIVED 我們就可以把廣播接收器注冊到系統裡面,可以讓系統知道我們有個廣播接收器。這里有兩種,一種是代碼動態注冊: //生成廣播處理 smsBroadCastReceiver = new SmsBroadCastReceiver(); //實例化過濾器並設置要過濾的廣播 IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); //注冊廣播 BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); 一種是在AndroidManifest.xml中配置廣播 package="spl.broadCastReceiver" android:versionCode="1" android:versionName="1.0"> android:label="@string/app_name"> 兩種注冊類型的區別是: 1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。 2)第二種是常駐型,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。 BroadcastReceiver用於監聽被廣播的事件 必須被注冊,有兩種方法: 1、在應用程序的代碼中注冊 注冊BroadcastReceiver: registerReceiver(receiver,filter); 取消注冊BroadcastReceiver: unregisterReceiver(receiver); 當BroadcastReceiver更新UI,通常會使用這樣的方法注冊。啟動Activity時候注冊BroadcastReceiver,Activity不可見時候,取消注冊。 2、在androidmanifest.xml當中注冊 使用這樣的方法注冊弊端:它會始終處於活動狀態,畢竟是手機開發,cpu和電源資源比較少,一直處於活動耗費大,不利。

『柒』 Android中線程與線程,進程與進程之間如何通信

使用handler發送message,消息隊列排隊

進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄存器的內容來表示。
進程是一個「執行中的程序」。程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,我們稱其為進程。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間並發執行的程度。
線程和進程的區別在於,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU。

『捌』 rxandroid 是怎麼實現子線程和主線程通信

android里線程間通信,到現在我看到的實現都是用Handler,RxAndroid也不例外。

『玖』 面試被問到android中兩個子線程怎麼通信,我懵了。

構造HandlerThread類的對象mHandlerThread,這樣生成一個子線程可以調用new MyHandler(mHandlerThread.getLooper())來獲取子線程的handler,另一個子線程發消息,收到消息的就是子線程而不是主線程了。

『拾』 Android子線程和子線程之間的通信是怎樣的

如果你Thread A獲取數據是給另外一個Thread B使用的,那為什麼不以Thread B為主,甚至直接讓Thread B來請求數據數據呢。疑問:Thread A 請求數據,Thread B在那專門等待?為什麼要這么設計?如果你非要這么干,那也是Thread A把數據處理好了

熱點內容
javasocket讀取 發布:2025-01-19 16:59:48 瀏覽:336
魅族路由器在哪裡設置密碼 發布:2025-01-19 16:59:45 瀏覽:657
經濟與發展資料庫 發布:2025-01-19 16:59:44 瀏覽:727
出國訪問奪權 發布:2025-01-19 16:57:22 瀏覽:591
vb打開共享文件夾 發布:2025-01-19 16:57:11 瀏覽:484
怎麼查詢手機wifi密碼 發布:2025-01-19 16:41:31 瀏覽:187
linux編輯圖片 發布:2025-01-19 16:37:55 瀏覽:167
sql數據對比 發布:2025-01-19 16:32:09 瀏覽:232
magnet下載ftp 發布:2025-01-19 16:27:07 瀏覽:318
注冊密碼下劃線是什麼意思 發布:2025-01-19 16:23:58 瀏覽:806