#android #jobservice
#Android #jobservice
Вопрос:
Я внедрил приложение в Android, которое использует JobService для проверки обновлений. Я тестировал это на некоторых устройствах: 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, если я допустил какие-либо ошибки в кодировании, пожалуйста, дайте мне знать о любых предложениях.
Комментарии:
1. На каких еще устройствах вы тестировали?
2. Не во многих других, но я думаю, что это не работает в телефонах MI и Android с более высокими версиями @DevMike01
3. Выполняете ли вы фоновую работу в том же потоке, что и ваш JobService?
4. Какая версия Android установлена на ваших телефонах MI.
5. Я предполагаю, что JobService сам обрабатывает потоки. @ror
Ответ №1:
Я думаю, если вы будете использовать worker Manager, это будет более корректно.
У него есть возможность для разных версий Android.
Комментарии:
1. Что ж, я внедрил,
workManager
и это хорошо работает во всех версиях Android, которые я хотел (протестировано в эмуляторе), но все еще в телефонах MI , если я закрою приложение, оно больше не проверяет наличие обновлений, можете ли вы помочь мне решить эту проблему, пожалуйста @Alexander @kkarakk2. Я думаю, у телефонов MI есть ограничение для фонового процесса. Пожалуйста, проверьте настройки. quora.com/How-to-restrict-background-data-in-Redmi-note-4 2 эффективных способа ограничения фоновых данных будут следующими.