Как правильно использовать onStartJob в JobService? - PullRequest
0 голосов
/ 08 апреля 2019

Это хорошая практика, чтобы зарегистрировать приемник вещания в onStartJob() из JobService, а затем вернуть true и никогда не звонить jobFinished()?

Примерно так:

  public boolean onStartJob(@NonNull JobParameters job) {

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

    if (screenBroadcast == null){
      screenBroadcast = new ScreenBroadcast();
      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 true;
  }

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");
      try {
        unregisterReceiver(screenBroadcast);
        screenBroadcast=null;
      }catch (IllegalStateException e){
        e.printStackTrace();
      }    
    }
    return false; // No more work to do
  }

Некоторый фон: Мне нужно поработать, когда у пользователя включен экран, и прекратить работу, когда пользователь выключит экран. Я не могу использовать службы переднего плана для регистрации приемников вещания. Однако этот обходной путь - единственный способ, которым мне удалось сделать эту работу. Однако я не уверен, что это хороший способ использовать JobService, как это, или JobService следует использовать для небольших задач в фоновом режиме?

...