首页 > 代码库 > AIDL用法详解
AIDL用法详解
在Android系统中,各应用程序都运行在各自的系统中,进程之间无法直接进行数据的交换。如果需要通信,就需要使用AIDL。
一、创建AIDL文件
package com.example.aidlexample; interface Dog{ String getDogName(); String getDogWeight(); }
二、将Service里的数据暴露出来
当访问者启动DogDescribe 服务时,将返回一个IBinder对象给访问者。访问者利用这个对象,就可以进行数据访问。
package com.example.aidlexample; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; import com.example.aidlexample.Dog.Stub; public class DogDescribe extends Service { private String dogweight; private String dogname; private DogBinder dogbinder; //将IBinder对象返回给访问者 @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return dogbinder; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); dogbinder = new DogBinder(); } // 继承自动代码生成的类Stub(实现了IBinder接口) public class DogBinder extends Stub { @Override public String getDogName() throws RemoteException { // TODO Auto-generated method stub return "xiaokeai"; } @Override public String getDogWeight() throws RemoteException { // TODO Auto-generated method stub return "30kg"; } } }三、访问者访问service提供的数据
访问者利用bindService(),在一个activity中,以bind方式启动一个Service。同时拿到一个Binder对象。
package com.example.aidlexample; import android.app.Activity; import android.app.Service; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; public class MainActivity extends Activity { private Dog doginfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent it = new Intent(); ComponentName comp = new ComponentName(MainActivity.this, DogDescribe.class); it.setComponent(comp); bindService(it, conn, Service.BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub System.out.println("service disconn"); } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub doginfo = Dog.Stub.asInterface(service); try { System.out.println("serviceconnected" + doginfo.getDogName() + doginfo.getDogWeight()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); this.unbindService(conn); System.out.println("service unbind"); } }
AIDL用法详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。