アンドロイドのAIDLの使用 アンドロイドのアプリケーションにServiceを使用時、大部分の状況にはオブジェクトを渡すの必要はあります。そして、相応の操作はサービスの中で実行します。クライアントのActivityはただデータを渡します。その後全ての操作は全部呼び出したのサービスで完成します。ただし、データを渡す時、AIDLを使用します。整体感覚はAIDLはJAVAのインタフェースのようのものです。 クライアントはサービスを呼び出す時、bindServiceを通してサービスを起動させます。そして、サービスを呼び出す時、「ServiceConnection」と言うのバラメーターは必要です。 そしてサービスは「ServiceConnection」の方法「OnServiceConnected」に「IBinder」を渡します。 重点は「IBinder」と言うものです。その「IBinder」は Android的AIDL后台Service条用 调用后台的Service时,需要在两者之间传递参数,同时需要将操作放在后台的Service中来进行,前台的Activity只进行数据的传输。前台的客户端只是调用Service即可。只不过调用的Service时,传递的参数是通过AIDL来是实现的。整体感觉AIDL就像是一个接口,跟JAVA中的接口很类似。 前台调用Service时,通过bindService来启动后台的Service。在启动Service时需要调用参数ServiceConnection。并且Service将返回一个IBinder类型给ServiceConnection中的方法OnServiceConnected。 重点是在后台的Service中返回的IBneder是怎么生成的如何而来。具体来说就是返回的是咱们一开始就定义的aidl文件的对象。但是aidl文件是个类似接口的东西,估计是不能实例化的。所以必须得覆盖重写此方法。由此又有两种方法: (1) 声明一个JAVA类(peopleServiceAidl.java)继承peopleService.adil文件对应的gen目录下的JAVA文件peopleService.java的peopleService.java.Stub。重写里面的所有方法。然后在Serive中生成其实例化对象,并返回。 Private Stub peopleStub= new PeopleServiceAidl(); @OverRide Public IBinder(Intent arg0) { } (2) 不用声明继承peopleService.aidl文件的JAVA类。直接在Service中重写peopleService.java中的方法。并返回。 Return peopleStub; Private String name; Private int age; Private final peopleService.Stub sssss = new peopleService.Stub() { ……… //AIDL文件中实际的方法 } @OverRide Public IBinder(Intent arg0) { } 程序的结构目录。 Return sssss ; 本文来源:https://www.wddqw.com/doc/10e7915477232f60ddcca196.html