Источники , которые я прочитал, указывают, что ожидаемое поведение Android Workmanager после принудительного уничтожения - перезапуск "через некоторое время" после перезапуска приложения. Однако Workmanager в моем приложении перезапустится только после перезагрузки всего устройства. Если я просто перезапущу приложение, Workmanager останется в режиме ожидания. Я использую Android 10 Lineage OS, но я воспроизвел это поведение и на других устройствах. Это код в моей MainActivity:
private ActivityMainBinding oBinding;
private static final String TAG = "PeriodicWorkTag";
/**
* The minimum interval duration for {@link PeriodicWorkRequest} (in milliseconds).
*/
public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes.
/**
* The minimum flex duration for {@link PeriodicWorkRequest} (in milliseconds).
*/
public static final long MIN_PERIODIC_FLEX_MILLIS = 5 * 60 * 1000L; // 5 minutes.
@Override
protected void onCreate(Bundle savedInstanceState) {
LayoutInflaterCompat.setFactory2(getLayoutInflater(), new IconicsLayoutInflater2(getDelegate()));
super.onCreate(savedInstanceState);
//init job
androidx.work.PeriodicWorkRequest periodicWorkRequest = new androidx.work.PeriodicWorkRequest.Builder(
MonthlyWorker.class,
MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS,
MIN_PERIODIC_FLEX_MILLIS, TimeUnit.MILLISECONDS)
.addTag(TAG)
.build();
WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
//init Databinding
oBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
setSupportActionBar(oBinding.toolbar);
if(oBinding.mainContainer != null){
//are we restoring the instance state?
if(savedInstanceState != null){
return; //yes - do nothing
}
this.CreateNewFragment(new Fragment_Main());
}
}
Тестирование показало, что метод OnCreate () передается после перезапуска принудительно убитого приложения, как и строки запуска Workmanager. Поэтому кажется излишним запускать Workmanager в методе onResume ().
Как я могу гарантировать, что мои задания будут перезапущены после принудительного уничтожения? Спасибо за чтение.