![]() |
Модераторы: javastic |
![]() ![]() ![]() |
|
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Написал приложение с сервисом. Сервис работает нормально.
Если таск киллером убить приложения, с ними вместе убивается и сервис, но через несколько секунд запускается заново системой. Проблема в том, что если сразу после "убийства" перевести в режим ожидания (экран выключен), то сервис запустится только когда телефон перейдёт обратно в активный режим. |
|||
|
||||
PiyodaiSiyo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 31.12.2009 Репутация: 1 Всего: 2 |
а если просто из экземпляра Activity звать someSrvc.stopService() в егошнем onStop()?
да и экран можно оставлять вкл. после вызова super.onCreate(). звать getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) [а если звонок-смс там же запускать в onResume() someSrvc.startService()] Это сообщение отредактировал(а) PiyodaiSiyo - 19.2.2012, 09:01 |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Наверное не совсем правильно вопрос задал.
Если пользователь убивает службу, например таск киллером, то через некоторое время система эту службу автоматически перезапустит. Проблема в том, что если убить службу и сразу выключить экран телефона, то система запустит службу только после того как экран включится. Соответственно никаких активитей нету чтобы службу запустить. |
|||
|
||||
PiyodaiSiyo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 31.12.2009 Репутация: 1 Всего: 2 |
Ваш таск киллер по всей видимости это скомпилировання прога.
если служба пишется вами: "If a component starts the service by calling startService() (which results in a call to onStartCommand()), then the service remains running until it stops itself with stopSelf() or another component stops it by calling stopService()." Можно проследить выполняется ли onDestroy() службы перекрыв его и дать вам знать. И если да значит ваш сервис "умирает" но запускается из-за Intenta в манифесте.надо там поправить кое что что запускает его постоянно(в доках где то есть) если сторонняя-- незнаю(видимо там хитрости с Intent ами, что служба перезапускается) Это сообщение отредактировал(а) PiyodaiSiyo - 19.2.2012, 10:16 |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Таск киллер стандартный MIUI. Сервис мой. onDestroy не выполняется, а когда система перезапускает сервис сама, то выполняется только onCreate()
Собсна система то сервис перезапускает, но только когда телефон активен (экран включён) |
|||
|
||||
PiyodaiSiyo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 31.12.2009 Репутация: 1 Всего: 2 |
onDestroy()
The system calls this method when the service is no longer used and is being destroyed. Your service should implement this to clean up any resources such as threads, registered listeners, receivers, etc. This is the last call the service receives. стало быть вы неправильно организовали уничтожение копонента(в данном случае сервис(служба)) и надо добиться чтоб этот медод вызывался или ваш миуи просто вызывает onUnbind(...)(попробуйте вызвать оттуда stopSelf()) или же сушествуе какойто компонент (сервис ,активити который запускает последний но при "умирании" забывает вызвать someSrvc.stopService() вот он и висит (не забывайте вызывать везде super() при перекрытии) даже может быть что там вызываются копии этого сервиса(а то чего это onCreate(... ) каждый раз зовет) Это сообщение отредактировал(а) PiyodaiSiyo - 19.2.2012, 14:50 |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Мне кажется, что возникло недопонимание.
Есть моя программа в которой есть активити и мой же сервис. Активити запускает сервис вызовом startService() и закрывается finish(). Сервис при этом продолжает работать (собсна в этом и есть смысл сервиса - работать без активити). Под Андройд есть куча программок - таск киллеров которые убивают программы и сервисы висящие в памяти. Я ими не пользуюсь так как в MIUI (это сборка андройда) есть свой встроенный киллер, типа как в сенсе. Проблема заключается в том, что если убить процессы киллером и сразу выключить экран телефона, то мой сервис не перезапускается, хотя другие перезапускаются. Если же экран не выключать, то всё отлично перезапускается. super пишу во всех перегружаемых методах. Интересно то, что когда сервис запускаю я, вызывая startService(), то у сервиса отрабатывает сначала onCreate(), а потом onCommandStart(), а когда сервис перезапускает система, то onCommandStart() не отрабатывает. Цель всего этого - сервис должен работать постоянно пока я сам его не остановлю вызвав stopService(); |
|||
|
||||
PiyodaiSiyo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 31.12.2009 Репутация: 1 Всего: 2 |
гляньте в сторону onConfigChanged(Config cf)где любыеизменения-рестарты можно прописать в блоке if(cf.uiMode==Config.UI_UNDEFINED){...}
где cf это ваша новая конфигурация экрана переданная системой кодеру.Config.XXXX-маски. |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Так а кто будет обрабатывать onConfigChanged(Config cf), если на момент выключения экрана служба не работает (она жестоко убита таск киллером
![]() Мне кажется, что тут надо её как то хитро запускать, типа как системную что ли... Чтоб она в любом случае перезапускалась системой, либо вообще её нельзя было прибить. |
|||
|
||||
PiyodaiSiyo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 31.12.2009 Репутация: 1 Всего: 2 |
Сервис мой. onDestroy не выполняется
Стоп стоп если этот дестрой не отработал (вызывается гдето внутри finish()),ваша активити ЖИВА .попробуйте убить в еешней onStop сервис и в onResume стартовать его.Кроме того у него если не выгорит на крайняк есть свой онкофигчейнжд(не рекомендуется).Е сли долго долбить желаемая дырка п оявиться |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
А при чём тут активити и его finish()? Сервис должен работать независимо от того жива активити или нет. Если я сам останавливаю сервис при помощи Activity.stopService(), то Service.onDestriy() отлично отрабатывает. Он не отрабатывает когда я чищу память таск киллером (видать он не вызывает stopService(), а как то жестоко убивает всё, что в памяти).
В любом случае следующей строчкой после this.startService(intent) у меня идёт this.finish(); |
|||
|
||||
PiyodaiSiyo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 31.12.2009 Репутация: 1 Всего: 2 |
я имею в виду что когда миуи стопает ваш сервис его перезапускает активити (которая оказывается не убита не смотря на вызываемый финиш[так частенько случается если не остановленны некоторые треды или прослушка сенсоров]).А если стопает и + операция с экраном--она не перезапускает(живая активити) етот сервис.поэтому я и предполагаю что надо общаться с онрезьюмом принадлежащим активити. ну кась проведите трассировку этого метода.
|
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
А с чего это вдруг активити должна перезапускать сервис, если бы даже она была жива?
Активити запускает сервис только по нажатию кнопки (у меня так сделано). Ну и никаких тредов и прослушки сенсоров нету. Актовити только читает/пишет настройки в файл и запускает/останавливает службу. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Android | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |