App进程中存在一个Binder实体,ApplicationThread,
ActivityManagerService通过ApplicationThread的代理,和Application进行交互,例如让Application Pause到后台
但是为什么我找不到Application在那边启动binder线程,以监听ActivityManagerService的指令呢?
有哪位知道的,指点下~
------解决方案--------------------
这段代码不在你的Application里面,在android的源代码里,Activity.java里面。大概的流程是,系统先启动一个线程,线程利用反射机制加载你的apk里面的activity类,生成一个对象实例,然后获得各种service,然后将service跟你的activity实例attach。。。
------解决方案--------------------
近日研究Binder,正好也看了下application对应的进程启动及其建立Binder通信的地方。
今天碰巧看到哥们这个帖子,就跟你分享下吧。
请参考: http://blog.csdn.net/luoshengyang/article/details/6747696
主要流程:
1. startViaZygote -> zygoteSendArgsAndGetPid -> openZygoteSocketIfNeeded && sZygoteWriter.write
2. runSelectLoopMode -> peers.get(index).runOnce(); -> Zygote.forkAndSpecialize -> zygoteInit
-> zygoteInitNative -> onZygoteInit -> sp<ProcessState> proc = ProcessState::self(); && proc->startThreadPool();