Приемник вещания не работает после регистрации в onStartJob - PullRequest
0 голосов
/ 07 апреля 2019

Я использую FirebaseJobDispatcher и JobService, чтобы поработать с фоном. В основном я хочу зарегистрироваться на экране включения / выключения приемника. Когда задание вызывается впервые, получатель регистрируется так, как предполагалось. Однако сразу после вызова onStartJob(), onDestroy() и, согласно журналам, получатель становится нулевым. Если я пытаюсь включить / выключить экран, я не вижу никаких журналов от приемника. Что я здесь не так делаю?

В onStratJob() У меня есть следующий код:

public boolean onStartJob(@NonNull JobParameters job) {

    Log.i(JobFormActivity.TAG, "onStartJob() called");

    if (screenBroadcast == null){
      Log.e(JobFormActivity.TAG, "onStartJob() --> receiver is null, registering receiver");
      IntentFilter screenStateFilter = new IntentFilter();
      screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
      screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
      registerReceiver(screenBroadcast, screenStateFilter);
    }
 return false; 
  }

В onStopJob() У меня есть следующий код:

@Override
  public boolean onStopJob(@NonNull JobParameters job) {
    Log.e(JobFormActivity.TAG, "onStopJob() called");
    if(screenBroadcast != null) {
      Log.e(JobFormActivity.TAG, "onStopJob() --> receiver is not null, unregistering receiver");
      unregisterReceiver(screenBroadcast);
    }
    return false;
  }

В onDestroy() У меня есть следующий код:

public void onDestroy() {
    super.onDestroy();
    Log.e(JobFormActivity.TAG, "onDestory()");
    if(screenBroadcast != null)
        Log.e(JobFormActivity.TAG, "onDestroy() --> receiver is not null");
    else
      Log.e(JobFormActivity.TAG, "onDestory() --> receiver is null");
  }

1 Ответ

1 голос
/ 08 апреля 2019

Моя проблема заключалась в том, что я забыл инициализировать screenBroadcast в onStartJob() после проверки, является ли null. Также я возвращал false в onStartJob() вместо true.

Из Документы :

Возвращение false из этого метода означает, что ваша работа уже завершена. Будет разблокирован системный Wakelock для работы, и onStopJob (android.app.job.JobParameters) не будет вызываться.

И

Верните true из этого метода, если ваша работа должна продолжаться. Если вы делаете это, работа остается активной, пока вы не позвоните jobFinished (android.app.job.JobParameters, логическое), чтобы сообщить системе что он завершил свою работу, или пока работа не потребуется ограничения больше не выполняются.

В моем случае, так как мне требовалось, чтобы приемники вещания были живы, мне нужно было возвращать true, чтобы не вызывать onDestroy и приемники не отменялись.

...