我有一个在后台运行的网络服务。我在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()
这是最好的做法吗?还是我错了?
答案 0 :(得分:1)
我认为你想做的是运行Remote Service
。这就是ServiceConnection
和bindService
的用途。这个想法是你的服务在baackground中运行,任何活动都可以“绑定”它并通过你在AIDL中定义的界面进行交互。
对服务的访问速度很快,因此您可以从UI线程调用服务中的方法,而无需使用AsyncTask
。这是一个好处。
然而,实现有点单调乏味,因为您必须编写此AIDL接口。
我建议您在此处阅读Google的教程:http://developer.android.com/guide/developing/tools/aidl.html
然后使用“教程”或“示例”谷歌“远程服务AIDL”。
祝你好运。