Вопрос

Я редактирую код приложения для Android, которое выполняет вызовы GPS в службе.Слушатель местоположения.Он также использует ServiceConnection

В некоторых представлениях устройство решает, что моему приложению требуется слишком много времени для ответа, и что пользователь может либо «Принудительно закрыть», либо «Подождать».До появления этого всплывающего окна пользователь все еще может использовать приложение: он может прокручивать, перемещать, нажимать кнопки и т. д.

Я только предполагаю, что это связано со службой GPS, поскольку она запускается всякий раз, когда возникает эта проблема.

Я слышал, что эта проблема связана с потоком, работающим в UIthread, а не с фоновым потоком.Но я был уверен, что сервисы работают асинхронно в фоновом потоке.

Понимание оценено

Это было полезно?

Решение

Использование службы не обязательно порождает новый поток, вызов службы выполняется в потоке вызывающего объекта.Из документа службы API Android по адресу:«Обратите внимание, что службы, как и другие объекты приложения, выполняются в основном потоке своего хост-процесса..».

Вы можете указать службу для запуска в другом процессе, но лучше всего создать новый поток в службе.

Подробнее о сервисе Android:http://developer.android.com/reference/android/app/Service.html

Другие советы

Я полностью рекомендую вам расширить AsyncTask, это позволит правильно и легко использовать поток пользовательского интерфейса.Позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками.Возможно, вы захотите выполнить все вычисления в методе doInBackground. Кстати. Принудительно закрыть или подождать это классическое поведение для такого рода проблем.Удачи!!!

Обработка в службе по-прежнему может привести к зависанию вашего приложения.

Решение, которое вам следует рассмотреть, — это запускать любую логику, которая может затормозить вашу деятельность, в отдельном потоке.Сюда входят такие вещи, как:Обновления/вставки баз данных, сетевое взаимодействие и любые другие фрагменты долго работающего кода.

AsyncTask — удобный метод для этого, поскольку вы можете управлять пользовательским интерфейсом с помощью функций onPreExecute и onPostExecute.

Вы можете реализовать AsyncTask непосредственно в своем сервисе в качестве подкласса.

Надеюсь, это поможет!Ваше здоровье

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top