从服务传递数据

时间:2013-05-24 13:28:47

标签: android android-intent

我有一个Android服务,它从一些外部硬件收集数据。我使用显示here的回调结构将数据提供给我的活动。

我提供的数据是ArrayList<MyClass>。在阅读Android API文档时,似乎建议的方法是使用广播事件和Parcelable。我也看到Android应用程序中使用的回调,所以问题是重构我的代码以使用广播的优势是什么?

现在,将来,我希望允许外部应用程序访问此服务(例如,Tasker),因此我猜测我使用的回调方法仅用于本地应用程序。所以问题是如何使用AIDL描述从ServiceActivity进行回调。

1 个答案:

答案 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)