【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《Android-AIDL-Service(日本语版未完成)》,欢迎阅读!
アンドロイドの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.wddqxz.cn/10e7915477232f60ddcca196.html