【筆記】vold 和 MountService 通信簡略

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



                }
            ... ...
            }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章