cod*_*lus 5 android android-service android-activity
我有一个在后台运行的网络服务.我mConnection
在Activity中有这个全局变量
protected ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
serviceobject = ((NetworkService.MyBinder) binder).getService();
}
public void onServiceDisconnected(ComponentName className) {
serviceobject = null;
}
};
Run Code Online (Sandbox Code Playgroud)
然后我在Activity中onCreate(..)
使用绑定服务
bindService(new Intent(this, NetworkService.class),
mConnection,Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)
NetworkService类有一个内部类MyBinder
public class MyBinder extends Binder {
NetworkService getService() {
return NetworkService.this;
}
}
Run Code Online (Sandbox Code Playgroud)
现在从Activity调用任何Service方法,我使用serviceobject
和我AsyncTask
为每个方法调用创建一个.(我知道从Activity调用Service方法无效使用Services.I将它用于不涉及的轻量级方法很多计算)
这有助于我直接处理来自Service
使用的数据serviceobject
.我取消绑定服务中Activity
的onDestroy()
@Override
protected void onDestroy()
{
unbindService(mConnection);
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方式,还是我错了?
我想你想做的就是运行一个Remote Service
. 这就是ServiceConnection
习惯bindService
。这个想法是,您的服务在后台运行,任何活动都可以“绑定”到它并通过您在 AIDL 中定义的接口进行交互。
对服务的访问速度很快,因此您可以从 UI 线程调用服务中的方法,而无需使用AsyncTask
. 这是好处之一。
然而,实现起来有点乏味,因为你必须编写这个 AIDL 接口。
我建议您在这里阅读 Google 的教程:http://developer.android.com/guide/developing/tools/aidl.html
然后用“教程”或“示例”谷歌“远程服务AIDL”。
祝你好运。
归档时间: |
|
查看次数: |
1439 次 |
最近记录: |