最佳实践 - 将活动绑定到活动

时间:2012-05-20 13:54:51

标签: android android-service android-activity

我有一个在后台运行的网络服务。我在Activity

中有这个全局变量mConnection
protected ServiceConnection mConnection = new ServiceConnection() {

    public void onServiceConnected(ComponentName className, IBinder binder) {
        serviceobject = ((NetworkService.MyBinder) binder).getService();
    }

    public void onServiceDisconnected(ComponentName className) {
        serviceobject = null;
    }
};

然后我使用

绑定活动onCreate(..)中的服务
bindService(new Intent(this, NetworkService.class), 
                 mConnection,Context.BIND_AUTO_CREATE);

NetworkService类有一个内部类MyBinder

public class MyBinder extends Binder {
    NetworkService getService() {
        return NetworkService.this;
    }
}

现在从Activity调用任何Service方法,我使用serviceobject并为每个方法调用创建一个AsyncTask。(我知道从Activity中调用Service方法会使使用Services.I将它用于不涉及太多计算的轻量级方法)

这有助于我使用Service直接处理serviceobject中的数据。 我在Activity的{​​{1}}

中取消绑定服务
onDestroy()

这是最好的做法吗?还是我错了?

1 个答案:

答案 0 :(得分:1)

我认为你想做的是运行Remote Service。这就是ServiceConnectionbindService的用途。这个想法是你的服务在baackground中运行,任何活动都可以“绑定”它并通过你在AIDL中定义的界面进行交互。

对服务的访问速度很快,因此您可以从UI线程调用服务中的方法,而无需使用AsyncTask。这是一个好处。

然而,实现有点单调乏味,因为您必须编写此AIDL接口。

我建议您在此处阅读Google的教程:http://developer.android.com/guide/developing/tools/aidl.html

然后使用“教程”或“示例”谷歌“远程服务AIDL”。

祝你好运。