У меня есть установка, которая выглядит примерно так:
class MyFragment implements SomeEventListener {
Application mAppContext;
boolean mBound;
boolean mDidCallUnbind;
MyIBinder mBinder;
ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mBound = true;
mBinder = (MyIBinder) service;
mBinder.getThings();...
}
@Override
public void onServiceDisconnected(ComponentName name) {
mDidCallUnbind = false;
mBound = false;
mBinder = null;
}
};
...
@Override
public void onSomeEvent() {
mAppContext.bindService(...);
}
void unbindService() {
if (mBound && !mDidCallUnbind) {
mDidCallUnbind = true;
mAppContext.unbindService(mConnection);
}
}
@Override
public void onPause() {
unbindService();
super.onPause();
}
}
Однако время от времени я все еще вижу ошибку в заголовке: java.lang.IllegalArgumentException: Service not registered
создается при вызове unbindService()
. Я упустил что-то глупое или что-то еще происходит? Я должен отметить, что может существовать несколько таких фрагментов.
Изменить
Поскольку на самом деле кажется, что никто не читает код, позвольте мне объяснить. unbindService()
не вызывает Context.unbindService(ServiceConnection)
, если служба не привязана (mBound
) и она не вызывалась ранее до того, как обратный вызов onServiceDisconnected(...)
был получен из возможного предыдущего вызова unbindService()
.
Имея это в виду, есть ли случаи, когда Android отвяжет вашу службу для вас, так что служба станет несвязанной, но onServiceDisconnected не будет вызываться, что оставит меня в устаревшем состоянии?
Кроме того, я использую контекст своего приложения для начальной привязки. Предположим что-то вроде:
@Override
public void onCreate() {
mApplication = getContext().getApplicationContext();
}
onSomeEvent()
никогда не произойдет доonPause()
, то ваша служба не привязана. - person Justin Jasmann   schedule 28.02.2014mAppContext
, какой контекст вы используете? - person Justin Jasmann   schedule 28.02.2014mAppContext
относится к типуApplication
. - person dcow   schedule 28.02.2014