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 части:

  1. связываются с Service
  2. после Service подключен, продолжить обработку