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);
}
}
... ...
}
}