繁体   English   中英

默认情况下,没有IPC的Android进程是否具有Binder线程池?

[英]Does an Android process without IPC have a Binder thread-pool by default?

我知道Binder线程用于IPC和诸如Intent之类的高级机制。 但是,如果应用程序不使用IPC,Intents或任何形式的Binder使用方法,那么在创建进程的默认情况下,它仍然具有Binder线程池吗?

换句话说:绑定线程池在流程生命周期的什么时候实例化? (在创建时或在第一次IPC调用之前为默认值)

您的活页夹线程池将作为libBinder初始化的一部分自动创建。 具体来说,从Zygote分叉并启动Activity生命周期的应用程序在ActivityManager上进行调用-这就是那里的活页夹调用。 低级调用使用ProcessState对象,该对象是一个单例对象,在构造时将调用open_driver并在其后不久设置线程池。 从技术上讲,这更接近于第一次IPC调用-但需要强调的一点是,对于App组件(活动/服务/接收者/提供者),总会有这样的调用,即使您没有显式调用context.getSystemService()也不例外。

您可以自己查看(如果您的设备已植根):

尝试ls -l / proc / $ pid / fd

对于任何$ pid应用程序,您将看到一个数字(描述符)指向/ dev / binder

然后做

cd / proc / $ pid / task grep名称* /状态

并且您将看到Binder_ ..线程(该线程池被命名)。

在没有粘合剂的情况下启动流程的唯一方法是纯本机流程(即,与Bionic链接的NDK C项目)。 然后,如果您确实确实想要活页夹,则可以使用ProcessState(和IPCThreadState),也可以手动编写ioctl(2)调用的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM