1. 程式人生 > >Android 中aidl呼叫執行執行緒和同步非同步問題

Android 中aidl呼叫執行執行緒和同步非同步問題

1,bind服務回撥執行所線上程

客戶端呼叫bindService(intent, mConn, Context.BIND_AUTO_CREATE);

ServiceConnection回撥中獲取伺服器端的介面(實現了Binder的類)onServiceConnected回撥實在主執行緒中執行

2,呼叫服務端binder類(只實現binder和對應介面的stub類)

1》呼叫沒有用 oneway修飾的方法,客戶端呼叫會直接阻塞,服務端方法在binder執行緒池中執行

2》呼叫使用oneway呼叫的方法(不能有返回值),客戶端不會阻塞,服務端方法在binder執行緒池中執行

3,有回撥的binder方法(實現一個對應的伺服器端binder回撥)

1》回撥方法直接在伺服器端方法中呼叫:

客戶端阻塞,阻塞時間為兩個之和,客服端回撥在呼叫方法對應執行緒(如在主執行緒也是一樣,但是show toast 出不來),服務端執行緒任然在binder執行緒中執行

2》回撥方法在伺服器端方法中開執行緒呼叫

客戶端阻塞,阻塞時間為伺服器端時間,客服端回撥在客服端binder執行緒中執行,服務端執行緒任然在binder執行緒中執行

4,客戶端回撥中呼叫伺服器端方法

在3基礎上,再在回撥中呼叫伺服器端方法是在子執行緒中執行不是在binder執行緒

總結:呼叫binder中非oneway方法是阻塞的並且方法是在子執行緒中執行,呼叫oneway方法不阻塞,任然在子執行緒中執行

相關推薦

Android aidl呼叫執行執行同步非同步問題

1,bind服務回撥執行所線上程 客戶端呼叫bindService(intent, mConn, Context.BIND_AUTO_CREATE); ServiceConnection回撥中獲取伺服器端的介面(實現了Binder的類)onService

AndroidCountDownLatch實現多執行同步

簡介 CountDownLatch 通過它的名字也能猜出一二來,Countdown 顧名思義倒計時,Latch可以理解為觸發或者發射。也就是說當倒數到0時就可以發射火箭啦,線上程中就是一個等待的執行緒,當 countdown 到 0 就不用再等待了,可以向下執行

Android提示框與執行

訊息提示框 1.  Toast.makeText(當前上下文, "名字或密碼錯誤", Toast.LENGTH_SHORT).show();      1.1 Toast是Android中的一種簡單的訊息提示框      1.2 使用這個類的最簡單的方法是呼叫靜態方法構造您所

解決AndroidAsyncTask的多執行阻塞問題,android 3.0以後AsyncTask的execute ()方法發生了改變

解決Android中AsyncTask的多執行緒阻塞問題,android 3.0以後AsyncTask的execute()方法發生了改變        前沿:最近工作的時候發現程式中有一個特別嚴重的問題,因為我們app中有一個需求是如果本地沒有快取則請求網路上的資料,如果本

Android如何巧妙停止執行的方法

好長時間沒更新部落格了,最近聽取別人的部落格寫作經驗,將開發中遇到的問題進行分享也是原創。這是去年的網約車專案中遇到的。 在處理多執行緒任務時,比如倒計時接單(通過子執行緒實現倒計時),新來訂單15s後自動消失。而業務需求中又要允許使用者在倒計時未結束時手動劃

Android讓多個執行順序執行

執行緒排程是指按照特定機制為多個執行緒分配CPU的使用權。  有兩種排程模型:分時排程模型和搶佔式排程模型。    分時排程模型:是指讓所有的執行緒輪流獲得cpu的使用權,並且平均分配每個執行緒佔用的CPU的時間片。  搶佔式排程模型:是指優先讓可執行池中優先順序高的執行緒佔用CPU,如果可執行池中的執行

Android 三種使用執行的方法

public class Thread There are basically two main ways of having aThreadexecute application code. One is providing a new class that extendsThreadand over

Java執行同步非同步、以及執行的安全

  什麼是執行緒同步?     這裡的“同”是協同的意思,並不是共同。那麼就很好理解同步了,就是一起操作但並不是同時操作。比如流水線組裝汽車,可以視作一個執行緒,只有裝好了上一步的門,才可以裝下一步的門窗玻璃。沒有裝門能裝上玻璃嗎?顯然不行。所以執

Android實現延時執行操作的幾種方法

在Android開發中我們可能會有延時執行某個操作的需求,例如我們啟動應用的時候,一開始呈現的是一個引導頁面,過了兩三秒後,會自動跳轉到主介面。這就是一個延時操作。  下面是實現延時執行操作的幾種方法: 1.使用執行緒的休眠實現延時操作    new Thread() {

執行同步

執行緒和同步 1. 多執行緒作用 提高應用程式響應。利用多執行緒程式設計並不一定能加快程式執行的速度,其目的是擁有更加良好的程式響應。例如在一個圖形介面執行一個操作的同時啟動另一個。 使多CPU系統更加有效。 改善程式結構。多執行緒程式比單執行緒程式更能適應使用者需求的變更。 佔用更小的系

關於GCD序列佇列、併發佇列同步執行非同步執行的探討

Dispatch Queues Dispatch queue是一個物件,它可以接收任務,並將任務以先到先執行的順序來執行。Dispatch queue可以使併發的或序列的。併發任務會基於系統負載來合適地併發執行,序列佇列同一時間只執行單一任務。 GCD共有三種佇列型別: 1

【玩轉cocos2d-x之二十二】多執行同步02-售票

pthread有很多不同應用,官網都有相應的API解釋和Sample,這裡不再重複,本文主要介紹一個cocos2d-x多執行緒和同步示例。 1.售票 孫鑫老師的C++和Java多執行緒售票一直讓

【玩轉cocos2d-x之二十三】多執行同步03-圖片非同步載入

cocos2d-x中和Android,Windows都一樣,如果在主執行緒中處理一些耗時操作,那麼主執行緒就會出現阻塞現象,表現在介面上就是卡住,未響應等情況。為了避免這種情況的出現,我們需要在後

在VC++直接呼叫API執行列印任務

介紹: 這一段程式碼,用以演示《如何在VC++中使用API直接列印》。並且該段程式碼可以直接嵌入各種工程中,有實際使用的價值。 用途:在Visual C++中,應用程式通常是使用CView中提供的列印功能,在OnPrint()或OnDraw()中向印表機輸出。但是對於對話方塊中的資料,或基於對話方塊的程式,

Android如何實現後臺執行定時任務

      Android中的定時任務一般有兩種實現方式,一種是使用Java API裡的Timer類,另一種是使用Android的Alarm機制。 這兩種方式在多數情況下都能實現類似的效果,但Timer有一個明顯的短板,它並不太適用與那些需要長期在後臺執行的定時任務。As

使用android的handler延遲執行方法

         android中的handler可以用來延遲執行函式,例如在介面載入完成後10秒種執行一個方法A,可以如下: private Handler mHandler = new Handler() {      public void dispatchMessa

Java多執行同步非同步及阻塞非阻塞

1、程序和執行緒的概念 程序:執行中的應用程式稱為程序,擁有系統資源(cpu、記憶體) 執行緒:程序中的一段程式碼,一個程序中可以有多段程式碼。本身不擁有資源(共享所在程序的資源); 在java中,程式入口被自動建立為主執行緒,在主執行緒中可以建立多個子執

任務,執行同步(四)之ThreadPool(執行池)

執行緒池 任務後臺基礎:執行緒池。建立執行緒需要時間。如果有不同的短任務要完成,就可以事先建立許多執行緒,在應完成這些任務時發出請求,這個執行緒最好在需要更多的執行緒時增加,在需要釋放資源時減少。 不需要自己建立這樣的一個列表,該表由ThreadPool類託

Android的常見通信機制Linux的通信機制

另一個 mes TCP/IP 物理內存 ram 中一 最簡 雙工 erp Handler Handler是Android系統中的一種消息傳遞機制,起作用是應對多線程場景。將A進程的消息傳遞給B線程,實現異步消息處理。很多情況是將工作線程中需要更新UI的操作消息傳遞給UI主線

AndroidAPK簽名工具之jarsignerapksigner詳解

內容 value signature align light 文件簽名 item als release 一.工具介紹 jarsigner是JDK提供的針對jar包簽名的通用工具, 位於JDK/bin/jarsigner.exe apksigner是Google官方提