У меня был приоритетный сервис для кодирования мультимедиа, который иногда выполнялся часами. В этом процессе, регистрируя значение прогресса, я заметил, что все останавливалось, если это условие достигает:
если (phone not connected to adb
&& screen is locked)
Поэтому я решил попробовать этот новый WorkManager
.
Но проблема сохраняется. Я схватил WorkManager
пример проекта и попытался просто записать некоторое значение подсчета, которое добавлено ниже. Но проблема все еще там. Я даже попробовал с setRequiresDeviceIdle(true/false)
безуспешно.
Работает на Honor 8 Lite
API 24
работник
public class WorkerTest extends Worker {
int a = 0;
public WorkerTest(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@Override
public Result doWork() {
try {
Observable.interval(1, TimeUnit.SECONDS).doOnNext(new Consumer<Long>() {
@Override
public void accept(Long n){
Log.d("WorkerTest:doWork", String.valueOf(a++));
}
}
).subscribe();
return Result.SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return Result.FAILURE;
}
}
}
CallerClass
public class Main extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OneTimeWorkRequest blurRequest = new OneTimeWorkRequest.Builder(WorkerTest.class)
.build();
WorkManager.getInstance().enqueue(blurRequest);
}
}