外观
AIDL 是怎么工作的 方法一定运行在主线程吗?
标准回答
AIDL 根据接口定义生成 Stub、Proxy 和编解码代码,客户端与服务端依照相同契约跨进程调用。远程调用通常由服务进程的 Binder 线程执行,Service.onCreate 等组件生命周期在主线程执行,并不意味着 AIDL 方法也在主线程。同进程情况下,asInterface 可能直接返回本地实现,方法就在调用者线程执行。服务端如果要更新 View,应显式切换到 UI 线程;如果要执行耗时工作,应使用合适的工作线程并设计异步结果。
延伸追问
远程回调接口也可能在客户端 Binder 线程执行,需要考虑线程安全和回调顺序。
内容来源
- Android Framework 知识手册 · 原条目
4-3