Это хорошая практика, чтобы зарегистрировать приемник вещания в 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
следует использовать для небольших задач в фоновом режиме?