Создание низкоприоритетного Android-сервиса

Удивительно, но никто в Интернете не нуждался в создании низкоприоритетного сервиса Android, но я это делаю. Службе иногда может потребоваться интенсивная работа с ЦП или БД, поэтому я хочу, чтобы у него был самый низкий приоритет. Если это имеет значение, мне нужно, чтобы служба считывала записи (может быть несколько тысяч) из базы данных за один раз, а затем перебирала список и добавляла и вычитала некоторые значения. Очень важно, чтобы это создавало самую низкую нагрузку на CPU, мне все равно, если она будет завершена за 1 секунду или 10 секунд.

Например, Android dev docs:

@Override public void onCreate() { // Start up the thread running the service. Note that we create a // separate thread because the service normally runs in the process's // main thread, which we don't want to block. We also make it // background priority so CPU-intensive work will not disrupt our UI. HandlerThread thread = new HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND); thread.start(); // Get the HandlerThread's Looper and use it for our Handler mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper); } 

Полный пример ( http://developer.android.com/guide/components/services.html ) включает в себя обработчик сервиса и петлеукладчик, которые не объясняются в этом примере. Необходимы ли они для того, чтобы сделать сервис низким приоритетом или это просто dev docs усложняет ситуацию, и есть еще один способ убедиться, что услуга имеет низкий приоритет?

Важным для вашего случая использования является обработка информации в потоке, который вы создаете с помощью Process.THREAD_PRIORITY_BACKGROUND. Вы также можете обрабатывать вещи в другом потоке, который вы назвали Thread.setPriority . (Смотрите документы в теме )

Соглашение об андроидах для отправки команд в другой поток использует Handler и Looper , но вы не обязаны использовать их для обеспечения низкой предвзятости. Обработчик дает вам соглашение для отправки сообщений в поток, который будет обрабатываться по одному за раз. Он также дает условные обозначения для публикации элементов, которые будут запускаться после некоторой задержки или запуска через некоторое время. Обработчик связан с Looper, который занимается обработкой сообщений обработчиком.

Я пробовал много разных способов, но этот фрагмент кода помог мне в том же процессе.

 android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); 
Intereting Posts
Как получить серийный номер стекла программно Я хочу, чтобы текстовое представление было кликабельным. «Синхронизация» двух прядильщиков Служба Android не запускается с помощью теста JUnit Как установить тег фрагмента по коду? Android OnClickListener не стреляет для кнопки на отдельном макете Как читать pdf с использованием библиотеки itext в android В React Native, как вы связываете текстовый файл и читаете его значение во время выполнения? Com.google.firebase.database.DatabaseException: Сериализация массивов не поддерживается, используйте вместо них списки Отрицательная маржа Android не работает Запуск действия ACTION_VIEW для открытия браузера, как мне вернуться в мое приложение? Как создать новый эмулятор с пользовательским размером экрана? Переопределение андроида: эллипсис на субтитре ActionBar Как вы можете прокручивать LinearLayout? Может ли сборщик мусора отменить выделение одного экземпляра? (И почему и как его избежать)