#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, в другом классе сервиса, отделяя пользовательский интерфейс от кода, стоящего за ним. Проверьте примеры, которые я добавил выше, они намного лучше меня объясняют, как это работает.