Android IPC 之 AIDL 使用,我三年开发经验从字节跳动抖音离职后

{

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免费获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值