Страница 1 из 1

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

Добавлено: 02 янв 2014, 06:45
nobody
Каким образом возможна работа приложения и всех его потоков при блокировке/разблокировке экрана?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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