我有一些可以运行或停止的IntentService。如果活动是可见的,我需要在活动上反映它的进展(当前的状态非常复杂)。
我没有找到可靠和好的方法来确定我的IntentService是否正在运行,并准备好绑定到我的活动中。
如果我做了bindService,它总是返回true。如果onServiceConnected(as没有像任何其他回调那样良好地运行IntentService,则永远不会调用IntentService),而且我的活动始终处于准备状态。
我找到的唯一工作解决方案是我的IntentService类中的静态变量,它指示服务正在运行。但我相信,采用这种方法是错误的做法,许多人警告说,在某些情况下,这种做法是行不通的或不可预测的。
问题:开发人员期望如何处理bindService调用失败?
特殊情况:如果我们试图绑定到现在没有运行或处于某种中间状态(例如关闭等)的服务,该怎么办?
发布于 2018-07-03 07:04:31
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方法。
https://stackoverflow.com/questions/51148302
复制相似问题