3

Envrionment: Затмение
Язык: Java (Android)служба переходит в режим ожидания, когда устройство спит - Android

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

Могу ли я разбудить телефон каждые 5 минут или около того, чтобы запустить мое обслуживание, которое длится от 30 секунд до 1 минуты. А затем снова перевести телефон?

Заранее спасибо.

EDIT: Я очень новичок в программировании на Android и буду очень благодарен, если кто-нибудь скажет мне, как использовать WakefulIntentService. У меня есть служба, которая ищет GPS-местоположение пользователя так часто, и когда телефон переспал, я хочу, чтобы мой сервис все еще искал свое местоположение. Как я могу использовать WakebackIntentService для этого? И я смогу использовать его в этом сценарии.

Спасибо.

+0

Возможный дубликат [Android Sleep/Standby Mode] (http://stackoverflow.com/questions/5120185/android-sleep-standby-mode) –

ответ

-6

Я использовал AlarmManager, я посмотрел на WakefulIntentService, и это дало мне представление о том, что делать. Еще раз спасибо за помощь.

9

Вы должны держать процессор lock держать сервис работает

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG"); 
wl.acquire(); 
// When you are done 
wl.release(); 

И если ваша служба использует Wi-Fi, вам нужен другой замок, а

WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
wifiLock= wm.createWifiLock(WifiManager.WIFI_MODE_FULL, "TAG"); 
wifiLock.acquire(); 

// When you are done 
wifiLock.release(); 

Не забудьте добавить android.permission.WAKE_LOCK в вашем манифест

+0

Я забыл упомянуть, что я совершенно нул при разработке Android, так как вы, наверное, поняли, исходя из моего вышеупомянутого вопроса, но не могли бы вы рассказать о том, что вы подразумеваете под «блокировкой». Спасибо за быстрый ответ ... – user959631

+1

Приведенный выше подход быстро уничтожит батарею. – 323go

+1

Вопрос: ** не ** о батарее, и если вы правильно разработали приложение *, оно не должно влиять на – iTech

3

У меня есть служба, которая является поиском g для местоположения GPS пользователя каждый раз так часто, и когда телефон переспал, я хочу, чтобы мой сервис все еще искал свое местоположение. Как я могу использовать WakebackIntentService для этого? И я смогу использовать его в этом сценарии.

WakefulIntentService здесь не подходит, так как он предназначен только для того, чтобы устройство не спалось в течение короткого периода времени, чтобы выполнить какую-либо работу. Он не предназначен для поддержания работоспособности устройства в течение неопределенного времени, например, времени, необходимого для получения GPS-исправления.

У меня есть a LocationPoller project, который обрабатывает ваш сценарий немного лучше.

Я очень новой для Android программирования

То, что вы пытаетесь сделать, это не подходящий проект для кого-то с вашего Android уровень опыта, ИМХО.

+1

Спасибо, я ценю вашу помощь и мнения. Наверное, это не подходит, но так я узнал. Я поставил перед собой задачу. И посмотрим, смогу ли я выполнить эту задачу. Если я застрял на этом пути, я узнаю, что вы просматриваете Google и задаете вопросы здесь, в StackOverflow. Кстати, я узнал еще один способ, я использовал «AlarmManager», я посмотрел на ваш «WakefulIntentService», и это дало мне представление о том, что делать. В очередной раз благодарим за помощь. – user959631

0

Я не знаю, что именно делает ваша служба, но если это загрузка/загрузка данных на сервер, вы можете рассмотреть возможность использования Sync Adapter.

Если вам не нужны точные сроки, это меньше связано с вашей системой, чем с AlarmManager.

Я делаю что-то еще, вы можете посмотреть в JobScheduler API.

В любом случае, если вы действительно хотите придерживаться AlarmManager, просто знайте, что Inexact Repeating уже намного лучше, чем Exact Repeating.

+0

Спасибо за ответ, однако, этот вопрос был задан два года назад (по мне) и уже принял принятый ответ (два года назад) Пожалуйста, старайтесь избегать возобновления старых тем, спасибо;) – user959631

+2

Другие люди все равно найдут эту тему ища ответ на аналогичную проблему. Вот почему я ответил. Но кроме этого вы правы. – LanderV