我有一些可以运行或停止的前摄IntentService。如果活动可见,我需要在活动中反映其进度(当前状态非常复杂)。
我没有找到一种可靠的好方法来确定我的IntentService是否正在运行并准备绑定到我的Activity。
如果我执行 bindService ,它将始终返回true。如果未运行IntentService,则永远不会调用 onServiceConnected (以及任何其他回调),并且我的活动始终保持在准备状态。
我发现的唯一可行的解决方案是我的IntentService类中的静态变量,它指示服务正在运行。但是我认为使用这种方法是一种不好的做法,许多人警告说,在某些情况下,这种方法行不通或不可预测。
问题::Android开发人员应如何处理bindService调用失败?
特殊情况:如果我们试图绑定到当前未运行或处于某种中间状态(例如关闭等)的服务,该怎么办。
答案 0 :(得分:1)
private UploadService.Binder mServiceBinder;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createService();
}
private void createService() {
if (mServiceBinder == null)
bindService(new Intent(this, UploadService.class),
mConnection,
Context.BIND_AUTO_CREATE);
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mServiceBinder = ((UploadService.Binder) service);
((UploadService.Binder) service).getService().setCallback(DashFragment.getInstance());
}
@Override
public void onServiceDisconnected(ComponentName name) {
mServiceBinder = null;
}
};
@Override
public void onDestroy() {
super.onDestroy();
if (mServiceBinder != null) {
unbindService(mConnection);
mServiceBinder = null;
}
}
如果mServiceBinder不为null,则意味着您的服务已成功绑定到活动,否则您必须调用create service方法。