Поддерживайте работу потока пользовательского интерфейса, когда экран выключен

#android #multithreading #user-interface

#Android #многопоточность #пользовательский интерфейс

Вопрос:

Я создаю приложение, которое обновляет пользовательский интерфейс с помощью метода runOnUiThread(Runnable). Очень важно, чтобы этот поток пользовательского интерфейса продолжал выполняться до тех пор, пока у пользователя запущено это приложение, даже при onPause (). Однако я понял, что когда экран заблокирован, Android останавливает поток пользовательского интерфейса; и я не виню их, вероятно, это для экономии заряда батареи. Но я хочу знать, есть ли способ переопределить это и сообщить activity или системе продолжать запускать поток пользовательского интерфейса.

Ответ №1:

Я бы предпочел запустить ваш код как сервис и подключить его к действию, имеющему пользовательский интерфейс, через bindService.

Другой вариант, который у вас есть, — это создать блокировку пробуждения и постоянно поддерживать телефон включенным. Однако это может быть очень тяжело для батареи.

Проверьте запись руководства разработчика для связанных служб и посмотрите, подходит ли она вашему дизайну: http://developer.android.com/guide/topics/fundamentals/bound-services.html

Существует множество очень хороших руководств по запуску сервисов разной степени сложности. Взгляните на некоторые из них здесь:

Комментарии:

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

2. @AeroDroid вместо этого вы в основном запускаете код, который был у вас в вашем методе run, в другом классе сервиса, отделяя пользовательский интерфейс от кода, стоящего за ним. Проверьте примеры, которые я добавил выше, они намного лучше меня объясняют, как это работает.