AIDL的实现总结

由于应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),故使用AIDL的方式。比如天气预报的实现,数据在的刷新可以通过常驻的服务,另一个应用每次绑定服务的时候调用bingservice获取数据(通过打印日志可以发现onstartConand方法会得到调用,发送数据的地方可以写在这里)注意:服务运行在主线程中,普通的服务需要在执行耗时任务的时候需要开启一个线程,防止出现oom。而对于AIDL这种比较特殊,不需要开启一个线程,使用了远程Service后,MyService已经在另外一个进程当中运行了,所以只会阻塞该进程中的主线程,并不会影响到当前的应用程序(此说明可查看郭神的文章:https://blog.csdn.net/guolin_blog/article/details/9797169)。

实现绑定服务的两种方式:startService和bingService两种方式

对于startService方法特点;一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者不能调用服务里面的方法

对于bingService特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法

bindService基本实现:

1.创建一个服务类继承service

2.重写service的方法,对于onBing方法返回一个bind对象,此对象是建立和服务的链接,故需要通过内部类的方式创建一个MyBing类继承Bing,并在里面定义自己想要实现的方法功能

class MyBing extends Binder{
  //此方法根据需求自己定义实现
    public void getName(){

    }
}

3.获取Bind对象,然后返回给service的onBing重写方法里面

MyBing bing = new MyBing();

@Override
public IBinder onBind(Intent intent) {

    Log.d(TAG, "onBind: ");
    return bing;
}

4.获取bind对象的链接

对于复杂的AIDL方式的实现(实质是还是通过Bing对象和服务的关联)

1. New —-AIDL—-AIDL File ,建立AIDL文件 (建议aidl下面的包名和java下面的包名一致,考虑到以后传递实体数据这里有个坑


2. 如果aidl文件正确,Build–Rebulild Project之后,会在build线面的generated包下面自动生成一个Java接口文件

3. 建立一个服务类(Service子类) 


4. 实现有aidl文件生成的java接口 


5. 在AndroidManifest.xml中配置AIDL服务,尤其要注意的是,action标签中android:name的属性值就是客户端要引用该服务的id,也就是Intent类构造方法的参数值。

   <service
            android:name=".activity.service.aidl.AIDLService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.turing.base.activity.service.aidl.AIDLService" />
            </intent-filter>
        </service>

对于传递实体的坑

实体类user的包名和Userail的包名还有IMsg.aidl的import的包保持一致,否则会报错。

感谢以下博主: https://blog.csdn.net/qq_36988978/article/details/77920926

https://blog.csdn.net/qq_36988978/article/details/77920926

https://blog.csdn.net/yangshangwei/article/details/50675584

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值