Android Service學習之AIDL執行個體

來源:互聯網
上載者:User
由於每個應用程式都運行在自己的進程空間,並且可以從應用程式UI運行另一個服務進程,而且經常會在不同的進程間傳遞對象。在Android平台,一個進程通常不能訪問另一個進程的記憶體空間,所以要想對話,需要將對象分解成作業系統可以理解的基本單元,並且有序的通過進程邊界。


以下講對如何?AIDL調用進行講解,本文包括AIDL介面調用,回調,以及傳遞複雜資料類型


Demo運行


Aidl檔案
Person.aidl

package com.archermind.aidl;

parcelable Person;

ITaskBinder.aidl

package com.archermind.aidl;

import com.archermind.aidl.ITaskCallBack;

import com.archermind.aidl.Person;

interface ITaskBinder {


   void fuc01();

   void fuc02();

   String fuc03(in Person person);

   void registerCallBack(ITaskCallBack cb);

   void unregisterCallBack();

}

ITaskCallBack.aidl

package com.archermind.aidl;


interface ITaskCallBack {

    void onActionBack(String str);

}


先看Myservice的代碼

服務端實現了AIDL的相關介面,供用戶端調用

@Override

    public IBinder onBind(Intent arg0) {

        // TODO Auto-generated method stub

        return mBinder;

    }

    

    private final ITaskBinder.Stub mBinder=new ITaskBinder.Stub() {

        

        @Override

        public void unregisterCallBack() throws RemoteException {

            // TODO Auto-generated method stub

            Log.v(TAG,"unregisterCallBack...");

            mTaskCallBack=null;

        }

        

        @Override

        public void registerCallBack(ITaskCallBack cb) throws RemoteException {

            // TODO Auto-generated method stub

            Log.v(TAG,"registerCallBack...");

            mTaskCallBack=cb;

        }

        

        @Override

        public void fuc01() throws RemoteException {

            // TODO Auto-generated method stub

            Log.v(TAG,"fuc01...");

        }


        @Override

        public void fuc02() throws RemoteException {

            // TODO Auto-generated method stub

            Log.v(TAG,"fuc02...");

            mTaskCallBack.onActionBack("hello world");

        }


        @Override

        public String fuc03(Person person) throws RemoteException {

            // TODO Auto-generated method stub

            String name=person.getName();

            String descrip=person.getDescrip();

            int sex=person.getSex();

            String ret="";

            if(sex==0){

                ret="Hello "+name+",you are handsome"+"("+descrip+")";

            }else{

                ret="Hello "+name+",you are beautiful"+"("+descrip+")";

            }

            return ret;

        }

    };


用戶端實現回調介面

private final ITaskCallBack.Stub mCallBack=new ITaskCallBack.Stub() {


        @Override

        public void onActionBack(String str) throws RemoteException {

            // TODO Auto-generated method stub

            Log.v(TAG,"onActionBack str="+str);

        }

        

    };



用戶端如何與伺服器綁定並建立串連


Intent intent=new Intent("com.archermind.aidl.myservice");

bindService(intent,mConnection,BIND_AUTO_CREATE);


private ServiceConnection mConnection=new ServiceConnection(){


        @Override

        public void onServiceConnected(ComponentName name, IBinder service) {

            // TODO Auto-generated method stub

            mService=ITaskBinder.Stub.asInterface(service);

            try {

                mService.registerCallBack(mCallBack);

            } catch (RemoteException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            Log.v(TAG,"onServiceConnected");

        }


詳細資料請見附件中的源碼工程,希望對大家有用.



device-2012-09-29-153654.png (36.77
KB, 下載次數: 0)

AidlDemo.zip

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.