>

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

    내 문제는 screenBroadcast 를 초기화하는 것을 잊었다는 것입니다. 와이즈 비즈  그것이 onStartJob() 인지 확인 후 . 또한 나는 null 를 반환했다  와이즈 비즈   false 대신 .

    문서에서 :

    와이즈 비즈

    그리고 :

    와이즈 비즈 필자의 경우 브로드 캐스트 수신기가 살아 있어야했기 때문에 onDestroy가 호출되지 않고 수신기가 등록 해제되지 않도록 true를 반환해야했습니다.

    onStartJob()

관련 자료

  • 이전 Mac에서 Android Studio332 오류"ADB 서버가 ACK되지 않고 데몬을 시작하지 못했습니다"
  • 다음 multithreading - Clojure의 에이전트 및 스레드 동기화