Работа приложения при блокировке экрана

Интерфейс, диалоги, темы, стили, меню
Ответить
nobody
Сообщения: 11
Зарегистрирован: 02 янв 2014, 06:43

Работа приложения при блокировке экрана

Сообщение nobody » 02 янв 2014, 06:45

Каким образом возможна работа приложения и всех его потоков при блокировке/разблокировке экрана?

Аватара пользователя
alexmedv
Сообщения: 29
Зарегистрирован: 29 май 2013, 12:55

Re: Работа приложения при блокировке экрана

Сообщение alexmedv » 02 янв 2014, 10:07

nobody писал(а):Каким образом возможна работа приложения и всех его потоков при блокировке/разблокировке экрана?
Обычно, при блокировке экрана устройство засыпает. А вместе с ним приостанавливаются все пользовательские приложения. Однако ваше приложение может запретить устройству засыпать. Чтобы сделать это воспользуйтесь классом WakeLock

nobody
Сообщения: 11
Зарегистрирован: 02 янв 2014, 06:43

Re: Работа приложения при блокировке экрана

Сообщение nobody » 02 янв 2014, 16:02

alexmedv писал(а):
nobody писал(а):Каким образом возможна работа приложения и всех его потоков при блокировке/разблокировке экрана?
Обычно, при блокировке экрана устройство засыпает. А вместе с ним приостанавливаются все пользовательские приложения. Однако ваше приложение может запретить устройству засыпать. Чтобы сделать это воспользуйтесь классом WakeLock
А виджет разве не пользовательское приложение? К примеру, будильник или "напоминалка" какая-то. Или для виджета действую иные правила при блокировке экрана?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Работа приложения при блокировке экрана

Сообщение Foenix » 02 янв 2014, 16:34

alexmedv писал(а):
nobody писал(а):Каким образом возможна работа приложения и всех его потоков при блокировке/разблокировке экрана?
Обычно, при блокировке экрана устройство засыпает. А вместе с ним приостанавливаются все пользовательские приложения. Однако ваше приложение может запретить устройству засыпать. Чтобы сделать это воспользуйтесь классом WakeLock
Вот интересное слово "приостанавливаются". Что оно в контексте приложений, активити в андроиде? О многом говорит :-D
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
alexmedv
Сообщения: 29
Зарегистрирован: 29 май 2013, 12:55

Re: Работа приложения при блокировке экрана

Сообщение alexmedv » 02 янв 2014, 16:42

nobody писал(а):А виджет разве не пользовательское приложение? К примеру, будильник или "напоминалка" какая-то. Или для виджета действую иные правила при блокировке экрана?
Когда вы блокируете экран и он гаснет вряд ли получится рассмотреть что там происходит с виджетами :-)
Но я считаю, что код виджетов которые висят на рабочем столе, тоже не выполняется когда устройство заблокировано. Что касается будильников и напоминалок, то тут вы правы - они бы тоже не работали если бы не хитрая вещь под названием AlarmManager

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Работа приложения при блокировке экрана

Сообщение altwin » 02 янв 2014, 17:11

alexmedv писал(а):...
Но я считаю, что код виджетов которые висят на рабочем столе, тоже не выполняется когда устройство заблокировано.
...
Что то мне говорит о том, что поведение приложения в данном случае достаточно хорошо документировано и выражение "я считаю" более, чем не уместно.
Любой код в системе после его запуска выполняется пока устройство включено, если не определено обратное(либо реализован метод sleep/похожие). То, что экран не активен - не влияет на систему в целом, только на ту ее часть, которая ожидает данного события и в ваших силах сделать так, чтобы ваше приложение/виджет вел себя так, как вам это нужно. Вне зависимости от того - видите вы это или отвернулись/отключился экран. В случае с виджетом класс AppWidgetProvider сам по себе ничего не представляет - это всего лишь "обертка"(wrapper) BroadcastReceiver -а. Который в свою очередь должен завершить обработку brodcast - а в течении 10 секунд. В противном случае наступает так называемый ANR. Т.е. даже если ваш виджет не обрабатывает события засыпания и т.д., в тот момент как устройство "засыпает" эти самые бродкасты перестают передаваться и виджет похож на "спящий".. при возобновлении же просто восстанавливается состояние, но уже на основе текущих данных. Если вам просто необходимо реализовать определенное поведение вне зависимости от того, запущенно ли приложение и в каком состоянии находится, можно использовать AlarmManager.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Работа приложения при блокировке экрана

Сообщение altwin » 02 янв 2014, 17:19

nobody писал(а):Каким образом возможна работа приложения и всех его потоков при блокировке/разблокировке экрана?
Вам нужны root права(да конечно если просто WakeLock не достаточно.). Т.е. поведение вашего приложения должно быть не стандартным для системы(иными словами нужно запустить апп не в стандартной "песочнице"). В данном случае вам просто нужно игнорировать события screen lock/unlock. Хотя по сути -это ни к чему, поскольку вы же планируете обрабатывать какие -то данные и все равно вашему приложению или его потокам придется "уснуть", поскольку те же wifi/gps и другие аппаратные сенсоры просто отключатся(если конечно вы не хотите исправить у пользователя поведения системы). Как вариант все данные дял обработки можно носить с собой, либо загружать по максимуму пока есть доступ, но опять же никто вас не застрахует от того, что пользователю не понравится ваше поведение и он просто удалит перед сном все, что вы накачали.

P.S. опять же поведение устройства в данном случае очень зависимо от реализации платформы производителем и тут вам не поможет никто кроме аппаратной спецификации. Придется читать ее и разбираться с тем что и как они там накосячили. А это же Андрюха - устройств слишком много. Т.е. нужно использовать что то более или менее стандартизированное/реализованное у флагманов, но опять таки - это мизерная часть и сохранение поведения не гарантированно с обновлениями.

P.S. опять же вещи типа WakeLock - пользователь может запретить. Т.е. просто не дать приложениям изменять конфигурацию устройства. Да и не все устанавливают приложение у которого в описании сказано - "ОСТОРОЖНО я могу убить все ваши настройки :)"
Изображение

nobody
Сообщения: 11
Зарегистрирован: 02 янв 2014, 06:43

Re: Работа приложения при блокировке экрана

Сообщение nobody » 02 янв 2014, 17:50

Убивать настройки у меня нет в планах! Суть неотправлять мое приложение в сон, при событии screen lock/unlock должна приводить к тому, чтобы с определенной периодичностью обновлять состояние данных из сервера и совершать сигнализирующие поведение при изменении определенных параметров: вибрация, звуковой сигнал и пр.

Если при заблокированном экране, приложение не будет продолжать отправлять требуемые http/get запросы, то первоначальное назначение и функционал будут сведены на нет.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Работа приложения при блокировке экрана

Сообщение altwin » 02 янв 2014, 20:28

nobody писал(а):Убивать настройки у меня нет в планах! Суть неотправлять мое приложение в сон, при событии screen lock/unlock должна приводить к тому, чтобы с определенной периодичностью обновлять состояние данных из сервера и совершать сигнализирующие поведение при изменении определенных параметров: вибрация, звуковой сигнал и пр.

Если при заблокированном экране, приложение не будет продолжать отправлять требуемые http/get запросы, то первоначальное назначение и функционал будут сведены на нет.
AlarmManager вам более чем достаточно для такой задачи и не имеет значения спит приложение или вообще запускалось ли оно. По поводу вибраций/звуковых сигналов - для них есть системные события.

P.S. вам проще всего запускать поток, как демона, либо можно использовать Service.startForeground(int id, Notification notification), только не стоит забывать, что даже если ваше приложение не будет спать, это вовсе не значит, что не будет спать wifi адаптер к примеру и сеть будет доступна. Т.е. вам нужно не только не спать. но и разбудить окружающих, именно это я имел ввиду, говоря о убийстве настроек.
Изображение

nobody
Сообщения: 11
Зарегистрирован: 02 янв 2014, 06:43

Re: Работа приложения при блокировке экрана

Сообщение nobody » 02 янв 2014, 22:40

AlarmManager вам более чем достаточно для такой задачи и не имеет значения спит приложение или вообще запускалось ли оно. По поводу вибраций/звуковых сигналов - для них есть системные события.

P.S. вам проще всего запускать поток, как демона, либо можно использовать Service.startForeground(int id, Notification notification), только не стоит забывать, что даже если ваше приложение не будет спать, это вовсе не значит, что не будет спать wifi адаптер к примеру и сеть будет доступна. Т.е. вам нужно не только не спать. но и разбудить окружающих, именно это я имел ввиду, говоря о убийстве настроек.[/quote]
Я уже все привернул через WakeLock и все отлично работает. Пока работает :lol:
Если будет желание, то попробую и через AlarmManager, но думаю мне этот класс не подойдет на данном этапе разработки.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Работа приложения при блокировке экрана

Сообщение altwin » 02 янв 2014, 22:43

nobody писал(а): Я уже все привернул через WakeLock и все отлично работает. Пока работает :lol:
Если будет желание, то попробую и через AlarmManager, но думаю мне этот класс не подойдет на данном этапе разработки.
читали описание? Device battery life will be significantly affected by the use of this API...

P.S. удачи вам, надеюсь пользователи не сразу убьют приложение :)
Изображение

nobody
Сообщения: 11
Зарегистрирован: 02 янв 2014, 06:43

Re: Работа приложения при блокировке экрана

Сообщение nobody » 03 янв 2014, 19:08

altwin писал(а):
nobody писал(а): Я уже все привернул через WakeLock и все отлично работает. Пока работает :lol:
Если будет желание, то попробую и через AlarmManager, но думаю мне этот класс не подойдет на данном этапе разработки.
читали описание? Device battery life will be significantly affected by the use of this API...

P.S. удачи вам, надеюсь пользователи не сразу убьют приложение :)
Не убьют, так как в их интересах, чтобы оно корректно работало и своевременно оповещало об изменении состояния определенных параметров.

Но я также не отказываюсь, что могу в дальнейшем использовать и AlarmManager. Мой мизерный опыт в разработке под Андроид не дает должной уверенности в использовании данного класса... Окей, попробую и таким способом удовлетворить свое ТЗ :)

Ответить