目前,在活动onPause()
期间,我正在执行I / O操作,以将应用程序数据保存到磁盘中。
private void save() {
saveDataToFiles();
}
public void onPause() {
super.onPause();
save()
}
随着时间的推移,应用程序要求变得复杂。我不仅需要将数据保存到文件中。我还需要执行其他几项任务。
因此,代码将演变为
private void save() {
saveDataToFiles();
saveDataToSQLite();
saveDataOverTheInternet();
}
public void onPause() {
super.onPause();
save()
}
现在,save()
方法是一种非常耗时的方法。在UI线程中执行耗时的操作不是一个好主意。
我经历了How to execute background task when Android app is closed / set to background?(日期为2016年。因此,有些建议可能不再有效。)
我的初步计划是由save()
IntentService
方法
我不打算使用Service
。正如您在https://developer.android.com/guide/components/services.html中看到的2 Hello ... 示例一样,具有自己的线程机制的extends Service
比extends IntentService
但是,我也注意到Google https://developer.android.com/guide/components/bound-services.html
的一些警告注意:如果您的应用针对Android 5.0(API级别21)或更高版本,那么就是 建议您使用JobScheduler执行后台 服务。
我的目标是API 25.所以,我应该认真对待这个建议。
JobScheduler
期间我应该使用IntentService
还是onPause()
?我估计save()
的执行时间不应超过10秒。onPause
已触发。启动一个线程来执行save
onResume
已触发。启动Loader以执行load
onPause
的上一个帖子仍未完成save
操作,load
中的onResume
可能会读取旧数据。答案 0 :(得分:1)
经过多次实验,这是我对
的观察JobScheduler
而不是android.support.v4.app.JobIntentService
。在底层,它将在Android O中使用JobScheduler
,在Android O之前使用startService
。JobScheduler
的预期行为。它决定何时运行作业,具体取决于资源的可用性。即使Google建议我们使用JobScheduler
注意:如果您的应用针对Android 5.0(API级别21)或更高版本,那么就是 建议您使用JobScheduler执行后台 服务。
对于我的情况,我需要
这就是我选择使用IntentService
的原因。