Android AIDL使用

导引:
AIDL:Android Interface Definition Language,就是Android接口定义语言,为了实现进程间通信

流程:所谓的C/S模式,服务端(S):AIDL(1,2)+Service(3)+客户端(C)(4)

AIDL(1,2):目的就是为了生成FService.java文件.里面有IInterface,Stub,asInterface,onTransact,Proxy,IBinder等

1:在java 源码同级目录新建aidl目录

2:在aidl目录下定义.aidl文件,比如FService.aidl,保存后自动在generated里生成FService.java文件

package com.Service.aidl;
interface FService{  
    int open(int num);
}    

3:定义MyService并在AndroidManifest.xml中注册,在MyService中初始化FService并返回

 <service android:name=".service.MyService">
            <intent-filter>
                <action android:name="com.zacloud.device_service" />
            </intent-filter>
 </service>



public class MyService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
    }
    @Override
    public IBinder onBind(Intent arg0) {
        return mBinder;
    }
    private final FService.Stub mBinder = new FService.Stub() {
        public int getPid(){
            return Process.myPid();
        }
        public void basicTypes(int anInt, long aLong, boolean aBoolean,
            float aFloat, double aDouble, String aString) {
        }
    };

}

客户端(C):绑定service并初始化后调用服务器端方法

4:直接在activity中绑定和解绑MyService,并初始化FService后直接调用里面的方法

private FService fService;
ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            fService= IRemoteService.Stub.asInterface(service);
        }
    };


fService.open(50);

 Intent intent = new Intent(this, MyService.class);
 bindService(intent, conn, Context.BIND_AUTO_CREATE);

猜你喜欢

转载自blog.csdn.net/ware00/article/details/80511241