aidl是 Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

通过aidl我们可以完成从服务端到客户端的数据通信

在aidl中我们可以声明任意多个方法,除了内建类型(int boolean等)都需要导入,规则如下:

1、Java 原始类型不需要导入。

2、String、Lsit、Map 和 CharSequence 不需要导入。

创建aidl文件,New->file->文件名.aidl,添加如下代码:

packagecom.example.new1;interfaceINewService{voidsetAge(intage);intgetAge();voidsetName(Stringname);StringgetName();}

点击保存,刷新工程,会在gen下自动产生java代码。

(产生的代码有时候没有缩进,可以右键->Source->Format进行设置)


在生成的代码中又一个Stud类,他继承于IBinder。可以把它作为Service的onBind的返回值,一旦这个Service被其他程序的服务绑定,就将这个IBinder类实例发送出去,同样这个实例里重写的方法数据也跟着一起发送出去。


新建一个Servers,命名为NewService.java

里面声明一个Stub类,完成上面定义的四个函数,代码如下:

packagecom.example.new1;importcom.example.new1.INewService.Stub;importandroid.app.Service;importandroid.content.Intent;importandroid.os.Bundle;importandroid.os.IBinder;importandroid.os.RemoteException;importandroid.util.Log;importandroid.widget.Toast;publicclassNewServiceextendsService{privateStringname="www.51ct0.com";privateintage=18;@OverridepublicIBinderonBind(Intentarg0){//TODOAuto-generatedmethodstubToast.makeText(NewService.this,"onBind",Toast.LENGTH_LONG).show();Log.i("SERVICE","onbind");returnmbinder;//返回接口}publicvoidonCreate(){super.onCreate();Log.i("SERVICE","oncreat");}publicvoidonStart(Intentintent,intstartId){Log.i("SERVICE","onstart");}publicvoidonDestroy(){Log.i("SERVICE","ondestory");}privateINewService.Stubmbinder=newStub(){@Override//实现接口定义的函数publicvoidsetAge(intage)throwsRemoteException{//TODOAuto-generatedmethodstubNewService.this.age=age;}@OverridepublicintgetAge()throwsRemoteException{//TODOAuto-generatedmethodstubreturnNewService.this.age;}@OverridepublicvoidsetName(Stringname)throwsRemoteException{//TODOAuto-generatedmethodstubNewService.this.name=name;}@OverridepublicStringgetName()throwsRemoteException{//TODOAuto-generatedmethodstubreturnNewService.this.name;}};}

到目前为止,已经实现了接口中的全部函数,下面,将实现客户端的调用:

新建一个Activity.java,代码如下:

packagecom.example.new1;importandroid.app.Activity;importandroid.app.ActionBar;importandroid.app.Fragment;importandroid.content.ComponentName;importandroid.content.Intent;importandroid.content.ServiceConnection;importandroid.os.Bundle;importandroid.os.IBinder;importandroid.os.RemoteException;importandroid.util.Log;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewGroup;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;importandroid.widget.Toast;importandroid.os.Build;publicclassMainActivityextendsActivity{privateTextViewtextview;privateINewServiceinewservice;//声明接口privateServiceConnectionconn=newServiceConnection(){@OverridepublicvoidonServiceConnected(ComponentNamearg0,IBinderarg1){//TODOAuto-generatedmethodstubinewservice=INewService.Stub.asInterface(arg1);//获得接口try{inewservice.setName("我是Activity");//调用函数inewservice.setAge(25);textview.setText(inewservice.getName()+inewservice.getAge());}catch(RemoteExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}Log.i("SERVICE","success");}@OverridepublicvoidonServiceDisconnected(ComponentNamearg0){//TODOAuto-generatedmethodstubLog.i("SERVICE","errer");}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Buttonbutton1=(Button)this.findViewById(R.id.btn1);textview=(TextView)this.findViewById(R.id.mytext1);button1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubbindService(newIntent(MainActivity.this,NewService.class),conn,BIND_AUTO_CREATE);}});}}


运行结果如下:




更多相关文章

  1. C语言的函数递归(下)
  2. 《第一行代码Android》学习总结第二章 Activity创建与相关设置
  3. Flutter技术概览
  4. Android(安卓)Cursor浅析
  5. android 列出所有的应用
  6. Android字符串资源及其格式化
  7. 微信接口 - android
  8. Android常用类库说明
  9. Android(安卓)Studio 导入 Android(安卓)源码

随机推荐

  1. android工程字符串多语言翻译遗漏查找工
  2. Android之adt 23找不到NDK路径设置解决方
  3. android 的文本框输入类型
  4. android横竖屏切换后不重建不销毁Activit
  5. Android(安卓)RecyclerView
  6. Android(安卓)设置Activity样式 透明度
  7. Android非Kotlin支持项目添加Kotlin代码
  8. Android黄色警告汇总
  9. 关于android应用程序的入口
  10. android 中给图片加圆角效果