繁体   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