android studio aidl用法详解
来源:互联网 发布:农村淘宝店怎么加盟 编辑:程序博客网 时间:2024/05/22 06:14
在我们android开发中经常会遇到进程间通信,android提供了一种解决方案就是aidl,下面我来介绍一下如何在android studio中实现aidl。
1、在android studio中创建一个工程
2、创建两个module 比如我的: aidlserver 和 aidlclient这样就能实现两个进程了。
3、在aidlserver中的创建aidl文件见下图
4、在你新建的aidl中声明你的服务方法
5、在java/pakagename下创建service(别忘了在mainfest中声明你的service)
public class MyService extends Service{ @Nullable @Override public IBinder onBind(Intent intent) { return new MyBinder(); } class MyBinder extends IMyAidlInterface.Stub{ @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { System.out.println("get data from client:" + anInt + " " + aLong); } @Override public void sendObj(Student student) throws RemoteException { System.out.println("xixixixiixiixi"); } }}
6、将你的aidl包,直接copy到aidlclient中(客户端的aidl包必须和服务端一致,否则会序列化失败,无法bindservice)7、实现客户端和服务端的绑定代码
public class MainActivity extends AppCompatActivity { private IMyAidlInterface aidlService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); Intent intent = new Intent(); intent.setAction("cn.com.callServer"); bindService(intent, new MyConnection(), BIND_AUTO_CREATE); } public void callService(View view) { try { aidlService.basicTypes(15, 123, true, 887.3f, 563.5, "hello"); Student student = new Student(); student.setAge(12); student.setName("nihao"); aidlService.sendObj(student); } catch (RemoteException e) { e.printStackTrace(); } } class MyConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { aidlService = IMyAidlInterface.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } }}
8、可以试着运行一下aidlserver和aidlclient,没有意外aidlclient可以成功调用aidlserver中的方法了。
注:大家有没有发现上面还有一个接口用到了Sudent类,对了下面我再重点介绍一下自定义对象如何在aidl中使用。
1、首先在aidlserver的aidl包中创建Student类(为什么放到这里,这样你就可以直接把aidl包发给客户端了省去了手动copy的麻烦)
Student一定要实现Parcelable接口,下面是我创建的Student对象
public class Student implements Parcelable{ private String name; private String telNumber; private int age; public Student() {} public Student(Parcel pl){ name = pl.readString(); telNumber = pl.readString(); age = pl.readInt(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTelNumber() { return telNumber; } public void setTelNumber(String telNumber) { this.telNumber = telNumber; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(telNumber); dest.writeInt(age); } public static final Creator<Student> CREATOR = new Creator<Student>() { @Override public Student createFromParcel(Parcel source) { return new Student(source); } @Override public Student[] newArray(int size) { return new Student[size]; } };}2、在aidl的包下创建Student.aidl文件,下面是具体内容
package com.example.aidlserver; parcelable Student;3、此时你去运行你的aidl会报错,log显示找不到Student的定义,没错现在你的Student在aidl包下,编译时不会去它下面找类,此时你需要做以下工作,在build.gradle文件中加入以下代码。同理你的aidlclient中也要加上。
sourceSets{ main{ java.srcDirs = ['src/main/java', 'src/main/aidl'] } }4、此时你再运行应该就不会出问题了。总结:以上是我个人开发的方式,如果能帮到大家是我的荣幸,如果大家不喜欢请忽略。
1 2
- android studio aidl用法详解
- Android studio AIDL详解
- Android Studio Service AIDL 详解
- Android Studio Service AIDL 详解
- Android Studio中AIDL的使用详解
- ANDROID STUDIO 使用 AIDL(一)基础用法
- AIDL用法详解
- Android studio import aidl
- Android Studio 使用AIDL
- Android Studio导入aidl
- [Android Studio] AIDL
- android studio AIDL使用方法。
- AIDL导入Android Studio
- Android Studio 使用AIDL
- Android Studio AIDL
- Android Studio新建AIDL
- Android Studio 使用AIDL
- Android studio中的aidl
- 很漂亮的HTML5后台管理系统模板gebo_admin_v1.6代码下载
- javascript zero to hero系列(1 开篇)
- gitHub提交项目总结
- iOS中保证线程安全的几种方式与性能对比
- 【语法】robot一些语法
- android studio aidl用法详解
- Eddy's digital Roots
- asp.net前台js调用后台方法
- SpringMVC 配置问题
- ORA-32004:obsolete or deprecaated parameter(s) specified for RDBMS instance Oracle 12c Release 1
- unsafe编译
- 读书笔记-现代操作系统-2进程与线程-2.1进程2.2线程
- Maven本地仓库配置及修改Maven的本地仓库路径
- Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令