我读过的sources表明,强制杀死后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启动行也是如此。因此,用onResume()方法启动Workmanager似乎是多余的。
如何确保在强行杀死我的工作后会重新开始?感谢您的阅读。