【笔记】vold 和 MountService 通信简略

2 篇文章 0 订阅
2 篇文章 0 订阅

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



                }
            ... ...
            }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值