framework中的binder调用哪些是阻塞调用哪些是立即返回的

调用AMS的方法,基本上都是阻塞调用,即ActivityManagerProxy中的方法mRemote.transact()使用的是的flag为0。

调用ApplicationThread的方法,基本上都是非阻塞式调用,即立即返回。ApplicationThreadProxy中的方法mRemote.transact()使用的是IBinder.FLAG_ONEWAY(值为1)。就是sysytem_server远程调用应用的方法时是非阻塞的,而应用调用system_server的方法时是阻塞的。就是system_server很忙,是不能以阻塞的方式等应用的,而应用需要等system_server。

而使用AIDL创建的Proxy中,mRemote.transact()使用的flag是0,就是AIDL远程调用是阻塞的,其实也可以自己修改为非阻塞的。

猜你喜欢

转载自blog.csdn.net/b1480521874/article/details/85235065