You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
android-notes/blogs/Android/Framework/Interview/应用进程相关/应用是启用 binder 机制.md

984 B

应用是怎么启用 binder 机制的?
  1. 了解 binder 是用来干嘛的?
  2. 应用里面哪些地方用到了 binder 机制?
  3. 应用的大致启动流程是怎样的?
  4. 一个进程是怎么启用 binder 机制的?

什么时候支持 binder 机制的?

binder 启动时机

// handleChildProc(...)
static void zygoteInit() {
	commonInit();
	nativeZygoteInit();
	applicationInit(...);
}
void nativeZygoteInit(...) {
	gCurRuntime->onZygoteInit();
}
virtual void onZygoteInit() {
	sp<ProcessState> proc = ProcessState::self();
	proc->startThreadPool();
}
ProcessState::ProcessState()
    // open_driver() 打开 "/dev/binder" 驱动
	:mDriverFD(open_driver()), ... {
		if(mDriverFD>=0) {
			mVMStart = mmap(0, BINDER_VM_SIZE, PROT_READ, ..., mDriverFD, 0);
		}
	}

怎么启用 Binder 机制?

  1. 打开 binder 驱动
  2. 映射内存,分配缓冲区
  3. 注册 binder 线程
  4. 进入 binder loop