多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > IPC之AIDL(2)in out inout

IPC之AIDL(2)in out inout

來源:程序員人生   發布時間:2016-11-24 09:00:18 閱讀次數:2847次

內容大綱:

1.在AIDL的時候正確使用in out inout

上1篇我們用AIDL簡單實現了1個IPC,其中我們談到在定義aidl接口中的除基本類型和AIDL接口外的參數要調價修飾符in out 或 inout中的1種,本文將幫助大家理解in out inout,并讓讀者可以正確的使用in out inout。
在介紹in out inout的區分之前我們先明確兩個基本概念:出發點 和 終點,出發點指調用方,終點指響應方,比如我在客戶端調用aidl接口那末客戶端就是出發點 服務端就是重點,在1次調用中服務端如果要調用1個aidl接口回調給客戶端,那末服務端就是出發點,客戶端就是重點。
然后我們來定義in out inout:
in : 將對象從出發點傳遞給終點,在終點部份中對對象的修改不會反應到出發點,即只輸入
out : 對象中的值不會傳遞給終點,但是在終點部份對對象的修改會反應到出發點,即只輸出
intout : 將對象從出發點傳遞給終點,在終點部份的修改會反應到出發點,即輸入輸出都有影響

我們再用1個具體的例子來看1下這個辨別:
我們來看下客戶真個代碼:

        mServiceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                mBookManager = IBookManager.Stub.asInterface(service);
                try {
                    mBookManager.registerListener(new IBookListener.Stub() {
                        @Override
                        public void onBookAdd(Book book) throws RemoteException {
                            Log.i("wlh " , "addBook callback : " + book.name);
                        }
                    });
                    Book book = new Book();
                    book.name = "TestBook";
                    mBookManager.addBook(book);
                    Log.i("wlh",  book.name);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
                unbindService(mServiceConnection);
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {

            }
        };

我們輸出了callback 調用addBook 和調用后book對象的名稱。我們再來看下服務真個代碼:


    private IBinder mBinder = new IBookManager.Stub() {
        @Override
        public List getBookList() throws RemoteException {
            Log.i("wlh", "getBookList");
            return null;
        }



        @Override
        public void addBook(Book book) throws RemoteException {
            Log.i("wlh", "addBook : " + book.name);
            int N = mCallbacks.beginBroadcast();
            book.name += " : server";
            for (int i = 0; i 《 N; i++ ) {
                mCallbacks.getBroadcastItem(i).onBookAdd(book);
            }
            mCallbacks.finishBroadcast();

        }


        @Override
        public void registerListener(IBookListener listener) throws RemoteException {
            mCallbacks.register(listener);
        }

        @Override
        public void unRegisterListener(IBookListener listener) throws RemoteException {
            mCallbacks.unregister(listener);
        }
    };
    

視察addBook方法 我們在客戶端傳過來的book中修改了name字段 追加了1個:server,然后我們輸出了客戶端傳遞過來的book名稱。現在我們來看在book的修飾符分別為in out 和inout時候的系統輸出。(我們假定BookListener中的參數都是in,其實BookListener中的in out inout修飾就是出發點 和 終點的轉換,這個時候出發點是調用方服務端 終點是響應方客戶端,具體的讀者可自行分析)

in:
我們可以先猜想1下輸出,in表示數據會傳遞到終點,那末服務端會輸出TestBook,然后由于對對象的修改不會反應到出發點,所以對象不會反應到客戶端,客戶端仍然輸出的是TestBook,而callback中的回調是TestBook : server,我們來看下實際效果:

out:
out不會將數據傳遞到終點在這里也就是服務端,那末服務端會輸出null, 然后由于對象修改會反應到出發點也就是客戶端,所以客戶端會輸出 null : server,我們來看下實際效果:

inout:
inout即會把數據傳遞到終點,出發點也會響應終點的變化,那末服務端會輸出 TestBook
然后客戶端輸出 TestBook : server, 我們來看下實際效果:

歡迎關注公眾號:CoderHouse
這里寫圖片描述

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 天堂最新版在线www在线 | 亚洲无限乱码一二三四区 | 天堂最新版在线www在线 | 国产精品99爱免费视频 | 国产一区二区三区不卡在线观看 | 国产精选第一页 | 狠狠的撞进去嗯啊h女强男视频 | 亚洲另类视频在线观看 | 欧式午夜理伦三级在线观看 | 欧美视频在线观看视频 | 亚洲欧美日韩国产一区二区精品 | 国产精品66福利在线观看 | 久久国产综合 | 亚洲国产天堂久久综合 | 国产中文字幕免费观看 | 成年人视频在线免费观看 | 中文在线视频观看 | 日本欧美一区二区三区在线 | 国产午夜精品免费一二区 | 午夜羞羞视频在线观看 | 国内成人精品亚洲日本语音 | 多人做人爱视频在线观看 | 久久久久久久99精品免费 | 国产成人毛片 | 欧美黑人xxxxww | 精品国产一区二区三区不卡在线 | 最近中文在线国语 | 国产v片成人影院在线观看 国产v片在线观看 | 亚洲 欧美 日韩在线一区 | 一区二区不卡视频 | 亚洲精品不卡午夜精品 | 午夜影院亚洲 | 69av视频| 亚洲xxx视频 | 日本一区二区高清不卡 | 看一级毛片一区二区三区免费 | 欧美监狱性暴一级毛片 | 精品国产成a人在线观看 | 亚洲精品播放 | 国内精品不卡一区二区三区 | 毛片机地 |