我正在开发一个使用Services来执行异步操作的Android应用程序。
目前,我一直关注建议的模式,以便在UI关闭时取消绑定服务
onStart(){
context.bindService();
}
onResume(){
serviceConnection.registerCallback(this); //register/unregisterCallback is defined in my domain
checkServiceForPendingUIActionsToRequestUser();
}
onPause(){
serviceConnection.unregisterCallback(this);
}
onStop(){
context.unbindService();
}
这种方法的问题有两个:
注释unbindService()
调用以保持服务处于活动状态并不是一个好习惯,但无论如何我必须保持我的服务(在不等待输入的情况下也作为前景运行),至少在屏幕旋转之前完了。
有什么想法吗?
答案 0 :(得分:3)
选项#1:不要使用绑定模式,而是使用命令模式(startService()
与stopService()
或stopSelf()
一起使用)。
选项#2。绑定保留片段中的Application
上下文,在片段本身被销毁时解除绑定。保留的片段存在于配置更改中。 Application
上下文避免了与在配置更改中保留绑定相关的一个可能的内存泄漏区域。
This sample project演示了选项#2。在我的DownloadFragment
中,我绑定到onAttach()
中的服务:
@Override
public void onAttach(Activity host) {
super.onAttach(host);
appContext=(Application)host.getApplicationContext();
appContext.bindService(new Intent(getActivity(),
DownloadService.class), this,
Context.BIND_AUTO_CREATE);
}
(片段本身也作为ServiceConnection
)
我在onDestroy()
取消绑定:
@Override
public void onDestroy() {
appContext.unbindService(this);
disconnect();
super.onDestroy();
}