Я пишу простой музыкальный проигрыватель и создал службу воспроизведения, которая реализует интерфейс AIDL для связи с клиентами, один — простой браузер дорожек, а другой — еще более простую активность проигрывателя. Служба управляет объектом MediaPlayer, в то время как два действия используют ServiceConnections для получения соединений со службой.
Это включено в методы onStart() обоих действий:
@Override
public void onStart()
{
super.onStart();
Intent i = new Intent(this, PureService.class);
startService(i);
bindService(i, mConnection, 0);
}
Я сделал это для того, чтобы служба не останавливалась сразу при отвязке. Конечно, на самом деле это не было проблемой, потому что моя активность вообще отказывается отвязаться от службы. Каждый раз, когда мое приложение обращается к unbindService в любом из этих действий, unbindService каждый раз без исключения выдает исключение IllegalArgumentException (хе-хе).
В методах onStop:
@Override
public void onStop()
{
super.onStop();
if (mBound) {
try {
unbindService(mConnection);
} catch (java.lang.IllegalArgumentException e)
{
//Print to log or make toast that it failed
}
}
mBound = false;
}
Мне интересно вот что:
- Должен ли я вызывать unbindService() в методе onStop()? Или вообще?
- Я правильно называю?
- Есть ли что-то особенное в том, как я запускаю/привязываю службу, о чем мне следует знать?
- Я делаю что-то совершенно, совершенно неправильно? Я новичок в программировании для Android, так что это, конечно, не исключено.
Заранее спасибо.
РЕДАКТИРОВАТЬ: вот переопределения ServiceConnection
public void onServiceConnected(ComponentName className, IBinder service) {
mBound = true;
mService = IPureService.Stub.asInterface(service);
}
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
В активности игрока есть дополнительный код, но он не связан с самой привязкой.