JobServiceを使用して更新をチェックするアプリケーションを Android に実装しました。Samsung J3、RedMi 5+、RedMi note pro、MI A2 lite などのいくつかのデバイスでテストしました。J3では正しく動作していますが、私がテストした他の電話では、アプリケーションがアクティブでない場合、またはアプリケーションが最近のアプリ リストにない場合、JobService はスケジュールされていません。
これが私が実装した方法です。
MainActivity.java
public static void scheduleJob(Context context) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
JobScheduler js =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo job = new JobInfo.Builder(
MY_BACKGROUND_JOB,
new ComponentName(context, CheckAdService.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPeriodic(15 * 60 * 1000)
.build();
int resultCode = js.schedule(job);
if (resultCode == JobScheduler.RESULT_SUCCESS) {
Log.d("JOB", "Scheduled");
} else {
Log.d("JOB", "Not Scheduled");
}
}
}
Service.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class CheckAdService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
Log.d("NetworkAvailable", "Flag No 2");
doBackgroundWork(params);
return true;
}
private void doBackgroundWork(final JobParameters params) {
final Context context = getApplicationContext();
...
IonDB ionDB = new IonDB(CheckAdService.this, "checkStatus");
ionDB.getData(new OnDbData() {
@Override
public void OnDbDataReceived(JsonObject jsonObject, boolean withError) {
...
// after notifying user with news I call jobFinished with rescheduling true option
jobFinished(params, true);
}
});
}
@Override
public boolean onStopJob(JobParameters params) {
Log.d("DBDATA", "Job cancelled before completion");
return true;
}
}
JobService の実装を修正して、すべての android で機能するようにしてくださいversions >= LOLLIPOP
。
私が Android を初めて使用することを考慮して、コーディングの間違いを犯した場合は、何か提案をお知らせください。