Хобрук: Ваш путь к мастерству в программировании

Запуск службы из планировщика заданий в Android 8.0 (Oreo)

Мне приходится регулярно выполнять фоновую синхронизацию данных с сервером по сети в моем приложении для Android. Я использую JobScheduler для выполнения этой синхронизации. Могу ли я запустить службу из метода onStartJob() в моем классе, расширяющемся из JobService? Выдаст ли он IllegalStateException в Android 8.0 (Oreo), если приложение находится в фоновом режиме во время выполнения задания?


  • Да, это будет работать на Android 8.0. Но это будет работать только на леденец и выше, если вы хотите сделать работу совместимой до уровня API 9, вы можете использовать Firebase JobDispatcher (github.com/firebase/firebase-jobdispatcher-android) 16.08.2018
  • Было добавлено что-то вроде JobIntentSevice Вот ссылка. 16.08.2018
  • @Nouman Bhatti: Да, я тоже проверил Диспетчер заданий Firebase, и оба они похожи, за исключением того факта, что FirebaseJobDispatcher обратно совместим с 9. Но вопрос здесь в том, могу ли я запустить службу в JobService в onStartJob()? Поскольку в Android 8 есть фоновые ограничения, из-за которых мы не можем запустить службу, когда приложение находится в фоновом режиме, и в таком случае выдает исключение IllegalStateException. Следовательно, если это задание запускается, когда приложение находится в фоновом режиме/убито, можем ли мы запустить службу из onStartJob? Будет ли это вызывать исключение IllegalStateException в Android 8? 16.08.2018
  • @DevAndroid, почему вы хотите запустить службу из диспетчера? 16.08.2018
  • Почему вы хотите запустить службу из onStartJob(), потому что мы используем JobScheduler вместо службы. 16.08.2018
  • Потому что onStartJob работает в основном потоке. Поэтому я запускаю службу для выполнения сетевой операции и возвращаю false из onStartJob, чтобы указать, что мне нужно, чтобы wakelock удерживался некоторое время дольше. 16.08.2018
  • @WaleedAsim Как вы думаете, нам не следует запускать службу из диспетчера / планировщика заданий? 20.08.2018

Ответы:


1

В Oreo, если вы хотите запустить службу из JobScheduler onStartjob(), вам нужно запустить службу переднего плана с уведомлением, потому что запуск общей фоновой службы вызовет исключение IllegalStateException.

01.02.2019

2

Вот библиотека Android-Job (https://github.com/evernote/android-job), который решает проблемы планирования фоновых заданий в разных версиях Android, а также в Oreo.

Он выполняет Job в отдельном потоке, поэтому, скорее всего, нет необходимости запускать новый/отдельный сервис. При выполнении задания библиотека обрабатывает получение блокировки пробуждения и удерживает ее до завершения задания.

30.10.2018
  • Ссылки на решения приветствуются в виде комментариев, но они не дают решения проблемы 30.10.2018
  • Новые материалы

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..

    Как реализовать линейную регрессию в JavaScript
    Узнайте, как реализовать линейную регрессию в JavaScript с помощью ML.js Линейная регрессия — это метод машинного обучения, используемый для моделирования связи между зависимой переменной и..