MountService和vold是使用NativeDaemonConnector:
MountService的构造函数中有如下:
mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25,
null);//新建NativeDaemonConnector
Thread thread = new Thread(mConnector, VOLD_TAG);
thread.start();
MountService 是callbacks回调,"vold"是socket的名字。
因为NativeDaemonConnector 继承Runnable,所以在MountService中开启一个线程,会执行NativeDaemonConnector 的run函数
public void run() {
mCallbackHandler = new Handler(mLooper, this);
while (true) {
try {
listenToSocket();
} catch (Exception e) {
loge("Error in NativeDaemonConnector: " + e);
SystemClock.sleep(5000);
}
}
}
看NativeDaemonConnector .listenToSocke ()
private void listenToSocket() throws IOException {
LocalSocket socket = null;
try {
socket = new LocalSocket();// 用localsocket的
LocalSocketAddress address = determineSocketAddress();
socket.connect(address);
InputStream inputStream = socket.getInputStream();
synchronized (mDaemonLock) {
mOutputStream = socket.getOutputStream();
}
mCallbacks.onDaemonConnected();
... ...
while (true) {
//读取socket消息
int count = inputStream.read(buffer, start, BUFFER_SIZE - start);
... ...
try {
//解析socket读取的消息
final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(rawEvent)
... ...
//回调MountService处理event
mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage(event.getCode(), event.getRawEvent()))
... ...
else {
//event加到mResponseQueue,这是是MountService主动发起和vold的通信,等待结果的
mResponseQueue.add(event.getCmdNumber(), event);
}
}
... ...
}
}