簡體   English   中英

Android系統服務默認是異步的嗎?

[英]Are Android system services asynchronous by default?

假設一個Android系統服務(例如ActivityManagerService)同時收到兩個請求。 系統服務會依次處理這些請求,還是會同時處理?

我在 AOSP 中看到一些代碼故意使用處理程序或線程執行異步操作(通常在將設置寫入存儲時)不過,我不清楚默認行為是什么,例如,對於一個簡單的系統服務方法,它不有任何專門的多線程代碼。

手頭的實際問題可能是:如果系統服務在處理事務 A 時收到事務 B,它會立即開始處理事務 B 還是等到它處理完事務 A?

我不確定如何在不編譯 AOSP 和添加日志語句的情況下對此進行測試,而且我現在無法編譯 AOSP。

Android 使用binder做進程間通信。 每個進程都會有一個線程池來響應 binder transact,binder 線程的名字就像binder:<pid>_x 如果系統服務(即ActivityManagerService )同時競爭兩個活頁夾事務,則 system_server(系統服務所在的進程)將從活頁夾線程池中選取兩個線程來對兩個活頁夾事務做出反應。 兩個活頁夾事務可以與兩個線程並行運行。 如果兩個binder transacts要修改相同的數據,他們應該同步持有一個鎖(即synchronized(ActivityManagerService.this) ),一個先拿到鎖go,另一個等待。

另一種方法是當使用兩個綁定器線程接收兩個事務時,封裝並將事務重新發布到具有處理程序的特定線程(即 android.bg)。 然后 android.bg 線程將同步處理交易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM