{
return this;
}
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
…
}
private static class Proxy implements com.scc.demo.ipc.IUserInterface
{
…
}
static final int TRANSACTION_basicTypes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
public static boolean setDefaultImpl(com.scc.demo.ipc.IUserInterface impl) {
…
}
public static com.scc.demo.ipc.IUserInterface getDefaultImpl() {
return Stub.Proxy.sDefaultImpl;
}
}
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, java.lang.String aString) throws android.os.RemoteException;
}
💥 向客户端公开接口
既然你服务端的接口已经定义好了,那就公开给客户端。要不客户端怎么调用。
public class AIDLService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
//返回你的接口
return stub;
}
private IUserInterface.Stub stub = new IUserInterface.Stub() {
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
//你的逻辑
}
};
}
好了,解释完了。上手搞。
🔥 实例
=====
💥 User.java
创建一个实例并进行序列化。具体过程就不描述了。
public class User implements Parcelable {
String name;
int age;
…
}
💥 IUserInterface.aidl
// IUserInterface.aidl
package com.scc.demo.ipc;
// Declare any non-default types here with import statements
parcelable User;
interface IUserInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
void setUser(in User user);
User getUser();
}
💥 AIDLService.java
public class AIDLService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
//返回你的接口
return stub;
}
private IUserInterface.Stub stub = new IUserInterface.Stub() {
User user = null;
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
@Override
public void setUser(User user) throws RemoteException {
this.user = user;
MLog.e(“AIDLService:”+user.toString());
}
@Override
public User getUser() throws RemoteException {
return user;
}
};
}
别忘记在AndroidMainfest.xml中声明一下。
💥 MainActivity
public class MainActivity extends ActivityBase implements View.OnClickListener {
IUserInterface iUserInterface ;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
…
}
ServiceConnection connectionAidl = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iUserInterface = IUserInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
bound = false;
}
};
@Override
protected void onStop() {
super.onStop();
if (bound) {
unbindService(connectionAidl);
bound = false;
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_bind_service:
bindService(new Intent(MainActivity.this, AIDLService.class),connectionAidl, Context.BIND_AUTO_CREATE);
break;
case R.id.btn_setuser:
try {
iUserInterface.setUser(new User(“Scc”,15));
学习分享
在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
2021最新上万页的大厂面试真题
七大模块学习资料:如NDK模块开发、Android框架体系架构…
只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。如有需要获取完整的资料文档的朋友点击我的GitHub免费获取。
不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。如有需要获取完整的资料文档的朋友点击我的GitHub免费获取。