android AIDL在同一工程下的使用方式

2020-04-25  本文已影响0人  heheworld

AIDL 一直都有听说,主要应用场景是跨进程通信,分客户端和服务端,网上的代码一大堆。最近项目刚好用到,手写下遇到很多问题,记下来。

需求:同一个工程,一个service使用remote 作为独立进程中的service,需要跟主进程通信,service中负责轮询数据,有特定数据后,传递给主进程。

但网上demo多是写Client,Server两个工程,也都是Client主动发起的一次性请求,只能自己倒腾了。不写不知道,一写发现好多地方都卡壳了,记下来

// Student.aidl
package com.nico.test4aidl;
// Declare any non-default types here with import statements
parcelable Student;  //Student.aidl 表示是个parcelable 类型的对象,供其他AIDL接口使用
// IMyAidlInterface.aidl
package com.nico.test4aidl;

// Declare any non-default types here with import statements
import com.nico.test4aidl.Student;  //这里手动引入Student
import com.nico.test4aidl.IMyCallback;
interface IMyAidlInterface {
Student getStudent();
void changeData();
void registerCallback(IMyCallback callback);
void unRegisterCallback();
}

如果用到其他的接口,(我这边需求是客户端通过aidl在服务端注册,服务端在处理,如果有触发会通知客户端,于是通过aidl
可以这么来写)

// IMyCallback.aidl
package com.nico.test4aidl;
// Declare any non-default types here with import statements
interface IMyCallback {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void callback(boolean flag);  //客户端给服务端的回调方法
}

大概就这么多了。平时还是需要多写代码,纸上得来终觉浅。

最后,遇到一个问题,在服务端的service内,aidl接口方法想调用service内的方法,kotlin来写总是提示不对,java写就没问题,对kotlin不熟悉,没有深入去研究。

上一篇下一篇

猜你喜欢

热点阅读