ServiceConnection всегда возвращает мне false
Я пытаюсь привязать службу в MainActivity, служба привязки связана с намерением, созданным в методе. updateTheNotification()
определяется внутри MainActivity, как указано ниже:
public void updateTheNotification()
{
Intent intentz = new Intent(context.getApplicationContext(), NotificationService.class);
context.getApplicationContext().bindService(intentz, mConnection, Context.BIND_ABOVE_CLIENT);
if (mBound) {
// Call a method from the LocalService.
// However, if this call were something that might hang, then this request should
// occur in a separate thread to avoid slowing down the activity performance.
mService.changeTheUI(true);
Toast.makeText(this, "Service triggered", Toast.LENGTH_LONG).show();
}
}
/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
NotificationService.LocalBinder binder = (NotificationService.LocalBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
updateTheNotification () вызывается методом onReceive приёмника вещания, который прикрепляется к кнопке в уведомлении.
1 ответ
Метод bindService()
асинхронный Это означает, что метод возвращается немедленно, даже если Service
еще не связан.
Когда Service
привязка завершена, onServiceConnected()
метод ServiceConnection
называется. Поскольку этот метод вызывается в основном потоке (UI), он не может быть вызван во время выполнения кода в любом другом методе, который также вызывается в основном потоке (UI) (например, onReceive()
,
Вам нужно разделить обработку на 2 части:
- связываются с
Service
- после
Service
подключен, продолжить обработку