假设一个Android系统服务(例如ActivityManagerService)同时收到两个请求,系统服务是依次处理还是同时处理?
我在AOSP中看到过一些有意使用处理程序或线程执行异步操作的代码(通常是在将设置写入存储时)。不过,我不清楚默认行为是什么,例如,对于没有任何专门的多线程代码的简单系统服务方法。
实际的问题可能是:如果系统服务在处理事务A时收到事务B,它是立即开始处理事务B,还是等到处理完事务A之后再开始处理?
我不知道如何在不编译AOSP和添加日志语句的情况下测试它,而且现在编译AOSP对我来说是不可能的。
1条答案
按热度按时间qhhrdooz1#
Android使用绑定器进行进程间通信。每个进程都将保留一个线程池来响应绑定器事务,绑定器线程的名称类似于
binder:<pid>_x
。如果系统服务(即ActivityManagerService
)同时接收两个结合剂交易,系统服务器(进程系统服务位于其中)将从绑定线程池中拾取两个线程以对两个绑定事务作出React。两个绑定事务可以与两个线程并行运行。如果两个绑定事务将更改相同的数据,则它们应同步持有一个锁(即synchronized(ActivityManagerService.this)
),先获得锁的一个继续,另一个等待。另一种方法是当接收到两个绑定线程的两个事务时,封装并重新发布事务到具有handler的特定线程(即android.bg)。然后android.bg线程将同步处理事务。