我有一个Android服务,它从一些外部硬件收集数据。我使用显示here的回调结构将数据提供给我的活动。
我提供的数据是ArrayList<MyClass>
。在阅读Android API文档时,似乎建议的方法是使用广播事件和Parcelable
。我也看到Android应用程序中使用的回调,所以问题是重构我的代码以使用广播的优势是什么?
现在,将来,我希望允许外部应用程序访问此服务(例如,Tasker),因此我猜测我使用的回调方法仅用于本地应用程序。所以问题是如何使用AIDL描述从Service
到Activity
进行回调。
答案 0 :(得分:1)
允许服务回调到Activity的方法是让service aidl接口定义一个注册函数,该函数将另一个aidl接口作为参数。
ServiceAidlInterface.aidl:
package com.test;
import com.test.CallbackAidlInterface;
interface ServiceAidlInterface {
void registerCallback(in CallbackAidlInterface callback);
}
CallbackAidlInterface.aidl:
package com.test;
interface CallbackAidlInterface {
void doCallback();
}
在您的活动中,您需要定义以下内容:
ServiceAidlInterface mService = null;
private CallbackAidlInterface mCallback = new CallbackAidlInterface.Stub() {
@Override
public void doCallback() throws RemoteException {
}
};
因此,当活动绑定您的onServiceConnected()被调用时,您可以执行以下操作:
mService = ServiceAidlInterface.Stub.asInterface(serviceBinder);
service.registerCallback(mCallback)