Как обеспечить перезапуск Android -Workmanager после принудительного закрытия приложения - PullRequest
0 голосов
/ 27 мая 2020

Источники , которые я прочитал, указывают, что ожидаемое поведение 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 ().

Как я могу гарантировать, что мои задания будут перезапущены после принудительного уничтожения? Спасибо за чтение.

...