Такая же ошибка и строчки android:process=":nameofbindingprocess" в манифесте нет.begemota писал(а):была аналогичная проблема... решилось очень просто...Imalur писал(а):аналогичная ситуация. никто не подскажет - как это побороть?etlt писал(а):Подскажите кто сталкивался:
код из примера на строчке
myService = ((MyService.MyBinder) binder).getService();
выходит ошибка приложения и полное зависание
Класс MyBinder в MyService существует, по идеи все должно работать, но "binder" почему то не приводится к MyService.MyBinder - ошибка
дело в том что сервис должен запускаться в основном потоке... почти наверняка уверен что Вы в манифесте при описании сервиса использовали android:process=":nameofbindingprocess"
уберите эту строчку - и все заработает
Урок 98. Service. Локальный биндинг
Re: Урок 98. Service. Локальный биндинг
Re: Урок 98. Service. Локальный биндинг
упс-с
сам ошибочку допустил - все нормально работает
сам ошибочку допустил - все нормально работает
Re: Урок 98. Service. Локальный биндинг
Я создал Service в Activity.
Почему при закрытии Activity убивается и Service?
Почему при закрытии Activity убивается и Service?
Re: Урок 98. Service. Локальный биндинг
Вопрос: как сервису узнать что активити закрыто/открыто (?) и можно ли отправлять ему интенты через броудкаст ? Предполагаю что перед закрытием активити нужно в onClose менять значение/флаг в сервисе, типа myService.canSendToAcMain = false; и т.о. сервис будет знать что отправлять не нужно. Такой код пригоден ?!
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
-
- Сообщения: 115
- Зарегистрирован: 08 янв 2015, 14:32
Re: Урок 98. Service. Локальный биндинг
эммм... я так понимаю тема вечная... по поводу убийства сервиса разобрался немного. точнее пришёл к такому выводу:
никакие методы остановки сервиса корректно мгновенно его не останавливают. Если даже и останавливают то тут-же перезапуск... повтыкал логи и начал играть в кошки мышки. Как я понял сервис получает команду на смерть и после этого система его может убить (не факт что мгновенно). Если активити вызвавшее сервис ещё живо... может уже дестрой, но не очищено из памяти, то сервис не убивается... Кнопка назад естессвтенно не убивает активити и ситуация такая же... в итоге решил откровенно забить на живучесть сервиса. Я сделал stopself и достаточно. По мере тасования ресурсов в памяти он рано или поздно умрёт. пусть и не мгновенно. На этом месте я смирился)))
теперь у меня другое) - у меня блютусовские команды обмена вынесены в сервис. там сидят все стримы и прочая...
запускаю сервис в onCreate активити... сервис на onCreate подготавливает сокет и стримы... дальше биндинг... всё замечательно, НО!!!
не соображу как победить наклон андройда(((
новое активити запускает новый сервис. их становится ДВА(
если я убью старый сервис, то он уже законнекчен к блютусу... заново создавать сокет и прикручивать стримы слишком долго(((
короче я запутался и вас сейчас запутаю(((
вопрос звучит просто: как переконнектится из нового активити к существующему сервису не убивая сервис при наклоне девайса???
крышу уже сносит от методов старта и передачи данных туда сюда(((
никакие методы остановки сервиса корректно мгновенно его не останавливают. Если даже и останавливают то тут-же перезапуск... повтыкал логи и начал играть в кошки мышки. Как я понял сервис получает команду на смерть и после этого система его может убить (не факт что мгновенно). Если активити вызвавшее сервис ещё живо... может уже дестрой, но не очищено из памяти, то сервис не убивается... Кнопка назад естессвтенно не убивает активити и ситуация такая же... в итоге решил откровенно забить на живучесть сервиса. Я сделал stopself и достаточно. По мере тасования ресурсов в памяти он рано или поздно умрёт. пусть и не мгновенно. На этом месте я смирился)))
теперь у меня другое) - у меня блютусовские команды обмена вынесены в сервис. там сидят все стримы и прочая...
запускаю сервис в onCreate активити... сервис на onCreate подготавливает сокет и стримы... дальше биндинг... всё замечательно, НО!!!
не соображу как победить наклон андройда(((
новое активити запускает новый сервис. их становится ДВА(
если я убью старый сервис, то он уже законнекчен к блютусу... заново создавать сокет и прикручивать стримы слишком долго(((
короче я запутался и вас сейчас запутаю(((
вопрос звучит просто: как переконнектится из нового активити к существующему сервису не убивая сервис при наклоне девайса???
крышу уже сносит от методов старта и передачи данных туда сюда(((
Re: Урок 98. Service. Локальный биндинг
Насколько я знаю 2 одинаковых сервиса запустить нельзя. Во второй раз вызовется onStartCommand(), но onCreate() сервиса вызываться не будет. И об этом есть в уроках (самый первый по сервисам).
-
- Сообщения: 115
- Зарегистрирован: 08 янв 2015, 14:32
Re: Урок 98. Service. Локальный биндинг
если я в onDestroy активити захлапываю сервис, то запускается новый onСreate... но логи из первого незахлопнутого продолжают какоето время идти...
меня не устраивает то, что на onСreate сервис заново начинает коннектится к блютусу... мне нужно чтобы он не убивался, а новое активити к нему цеплялось и биндило его дальше...
и ещё нужно чтобы при выходе из программы всёжтаки и сервис отключался... - это вот всю логику порттит)))
в итоге получается каша с состояниями одного и другого... ничего умнее не придумал как создать флаг и запихать его в preference
если кто подскажет что-то умнее буду безумно рад
меня не устраивает то, что на onСreate сервис заново начинает коннектится к блютусу... мне нужно чтобы он не убивался, а новое активити к нему цеплялось и биндило его дальше...
и ещё нужно чтобы при выходе из программы всёжтаки и сервис отключался... - это вот всю логику порттит)))
в итоге получается каша с состояниями одного и другого... ничего умнее не придумал как создать флаг и запихать его в preference
если кто подскажет что-то умнее буду безумно рад
Re: Урок 98. Service. Локальный биндинг
Так зачем вы его убиваете в активити?
Запустите его один раз в onCreate() (startService()).
bind/unbind в onStart()/onStop()
В onDestoy() уничтожаете сервис только в случае если активити явно закрывается (if(isFinishing()))
Запустите его один раз в onCreate() (startService()).
bind/unbind в onStart()/onStop()
В onDestoy() уничтожаете сервис только в случае если активити явно закрывается (if(isFinishing()))
-
- Сообщения: 115
- Зарегистрирован: 08 янв 2015, 14:32
Re: Урок 98. Service. Локальный биндинг
вооот... вот это и хотел услышать!!! спасибо! пойду мучать. выглядит очень логично)klblk писал(а):...
Re: Урок 98. Service. Локальный биндинг
Добрый день!
Уменя такой вопрос: В Service играет MediaPlayer, а кнопки управления находятся в разных Activity. И при нажатии, допустим, на кнопку "Play/Pause" её иконка меняется на соответствуюшую. Но при переходе на другую Activity или смену ориентации экрана создаётся ситуация когда - MediaPlayer выключен а иконка отображает что включён и может быть наоборот, что MediaPlayer играет а иконка показывает что он выключен. Следовательно есть необходимость мониторить состояние MediaPlayer в Service и передавать его состояние в Activity, чтобы та должным образом устанавливала иконки на кнопку. Так вот подскажите как это можно риализовать? Возможно есть другие варианты?
Уменя такой вопрос: В Service играет MediaPlayer, а кнопки управления находятся в разных Activity. И при нажатии, допустим, на кнопку "Play/Pause" её иконка меняется на соответствуюшую. Но при переходе на другую Activity или смену ориентации экрана создаётся ситуация когда - MediaPlayer выключен а иконка отображает что включён и может быть наоборот, что MediaPlayer играет а иконка показывает что он выключен. Следовательно есть необходимость мониторить состояние MediaPlayer в Service и передавать его состояние в Activity, чтобы та должным образом устанавливала иконки на кнопку. Так вот подскажите как это можно риализовать? Возможно есть другие варианты?
-
- Сообщения: 115
- Зарегистрирован: 08 янв 2015, 14:32
Re: Урок 98. Service. Локальный биндинг
вариантов масса... если сильно не заморачиваться, то можно создать перемнную в преференс, и хранить в ней состояния плейера... в разных активити доставать её и соответсвенно менять иконки.... или можно написать свой метод в сервисе, который бы мониторил плейер и возвращал бы его состояния в активити...
суть в следующем: закодируйте состояния плейера: 0 - молчит. 1 - воспроизводит, 2 - пауза и тд... что там ещё бывает? в стринг можно запихать что именно он воспроизводит... учитывая, что у сервиса свои переменные, а у активити свои, нужно реализовать связку. детский метод - это преференсес... внутри одного пака доступ к нему имеют все - сервис сохраняет, активити достаёт и читает.
суть в следующем: закодируйте состояния плейера: 0 - молчит. 1 - воспроизводит, 2 - пауза и тд... что там ещё бывает? в стринг можно запихать что именно он воспроизводит... учитывая, что у сервиса свои переменные, а у активити свои, нужно реализовать связку. детский метод - это преференсес... внутри одного пака доступ к нему имеют все - сервис сохраняет, активити достаёт и читает.
Re: Урок 98. Service. Локальный биндинг
Я 2 месяца как только начал изучать андроид программирование, что значит "закодируйте состояния плейера: 0 - молчит. 1 - воспроизводит, 2 - пауза и тд..." - как это риализовать? И "у сервиса свои переменные, а у активити свои, нужно реализовать связку" - я непонимаю как это сделать. Можно подробние, с кодом.
-
- Сообщения: 115
- Зарегистрирован: 08 янв 2015, 14:32
Re: Урок 98. Service. Локальный биндинг
тогда ковыряйте PREFERENCES) нужно чтобы вы понимали механизм хранения данных
вот тут: http://startandroid.ru/ru/uroki/vse-uro ... ences.html
берёте две переменных. Например, stat типа integer и playsong типа string
в сервисе каждый раз когда меняется состояние плейера записываете это состояние в stat.
по умолчанию у вас там 0 - плейер молчит
запустили песенку - записали туда 1
поставили на паузу - записали туда 2
кончилась песенка - записали туда 0
эта переменная отображает текущее состояние плейера
в текстовом виде можно также записывать что именно сейчас воспроизводится. имя воспроизводимого файла записываем в playsong.
это всё должен делать сервис
а при запуске активити, Вы просто считываете эти переменный где-нибудь в onCreatе. и в зависимости от того какое состояние подставляете соответствующую картинку кнопки. Также можно выводить имя воспроизводимого файла. ну в общем, вы внутри активити точно знаете всё что происходит в плейере. нужно просто перечитывать эти переменные.
более подробно с кодом к сожалению нет времени писать. по сути вам нужно совместить этот урок с биндингом и тот, который по ссылке с preferences.
доступ к preferences есть из любой части программы... и сервис и активити могут читать/сохранять эти переменные без заморочек. пробуйте, всё полчится
вот тут: http://startandroid.ru/ru/uroki/vse-uro ... ences.html
берёте две переменных. Например, stat типа integer и playsong типа string
в сервисе каждый раз когда меняется состояние плейера записываете это состояние в stat.
по умолчанию у вас там 0 - плейер молчит
запустили песенку - записали туда 1
поставили на паузу - записали туда 2
кончилась песенка - записали туда 0
эта переменная отображает текущее состояние плейера
в текстовом виде можно также записывать что именно сейчас воспроизводится. имя воспроизводимого файла записываем в playsong.
это всё должен делать сервис
а при запуске активити, Вы просто считываете эти переменный где-нибудь в onCreatе. и в зависимости от того какое состояние подставляете соответствующую картинку кнопки. Также можно выводить имя воспроизводимого файла. ну в общем, вы внутри активити точно знаете всё что происходит в плейере. нужно просто перечитывать эти переменные.
более подробно с кодом к сожалению нет времени писать. по сути вам нужно совместить этот урок с биндингом и тот, который по ссылке с preferences.
доступ к preferences есть из любой части программы... и сервис и активити могут читать/сохранять эти переменные без заморочек. пробуйте, всё полчится
Re: Урок 98. Service. Локальный биндинг
Большое спасибо буду пробовать.GRAF_COLLIOSTRO писал(а):тогда ковыряйте PREFERENCES) нужно чтобы вы понимали механизм хранения данных
вот тут: http://startandroid.ru/ru/uroki/vse-uro ... ences.html
берёте две переменных. Например, stat типа integer и playsong типа string
в сервисе каждый раз когда меняется состояние плейера записываете это состояние в stat.
по умолчанию у вас там 0 - плейер молчит
запустили песенку - записали туда 1
поставили на паузу - записали туда 2
кончилась песенка - записали туда 0
эта переменная отображает текущее состояние плейера
в текстовом виде можно также записывать что именно сейчас воспроизводится. имя воспроизводимого файла записываем в playsong.
это всё должен делать сервис
а при запуске активити, Вы просто считываете эти переменный где-нибудь в onCreatе. и в зависимости от того какое состояние подставляете соответствующую картинку кнопки. Также можно выводить имя воспроизводимого файла. ну в общем, вы внутри активити точно знаете всё что происходит в плейере. нужно просто перечитывать эти переменные.
более подробно с кодом к сожалению нет времени писать. по сути вам нужно совместить этот урок с биндингом и тот, который по ссылке с preferences.
доступ к preferences есть из любой части программы... и сервис и активити могут читать/сохранять эти переменные без заморочек. пробуйте, всё полчится
Re: Урок 98. Service. Локальный биндинг
Можно ли по данному примеру подключившись к сервису изменить публичну стринг сервиса?
или биндиг изменяет только то, что работает в онстарткоманд?
или биндиг изменяет только то, что работает в онстарткоманд?
-
- Сообщения: 36
- Зарегистрирован: 28 июн 2015, 03:13
Re: Урок 98. Service. Локальный биндинг
Доброго дня.
Я конечно могу ошибаться но по поводу останова сервиса, пока
поток tTask не завершишь, сервис так и перезапускается.
Но даже после этого в мониторе процессов он висит. Пока не остановишь.
Но мне кажется что так останавливать не правильно.
И единственно правильно его остановить, это устроить проверку завершения программы
в методе run()
И ещё вопрос: tTask в главном потоке отрабатывает или нет?
Я конечно могу ошибаться но по поводу останова сервиса, пока
поток tTask не завершишь, сервис так и перезапускается.
Но даже после этого в мониторе процессов он висит. Пока не остановишь.
Код: Выделить всё
@Override
protected void onDestroy(){
super.onDestroy();
if(isFinishing()) {
if (myService.tTask != null) myService.tTask.cancel();
stopService(intent);
}
}
И единственно правильно его остановить, это устроить проверку завершения программы
в методе run()
И ещё вопрос: tTask в главном потоке отрабатывает или нет?
Re: Урок 98. Service. Локальный биндинг
Всем привет.
Подскажите, пожалуйста, правильно ли я поняла, что при использовании локального биндинга, т.е. когда Сервис запущен в одном процессе с Активити, при закрытии Активити сервис всегда убивается и нет никакой возможности обеспечить его жизнь за пределами Активити?
Использую стороннюю библиотеку, которая предоставляет сервис, заточенный только под локальный биндинг.
Подскажите, пожалуйста, правильно ли я поняла, что при использовании локального биндинга, т.е. когда Сервис запущен в одном процессе с Активити, при закрытии Активити сервис всегда убивается и нет никакой возможности обеспечить его жизнь за пределами Активити?
Использую стороннюю библиотеку, которая предоставляет сервис, заточенный только под локальный биндинг.
Re: Урок 98. Service. Локальный биндинг
Подскажите, пожалуйста, а можно ли использовать timer для проверки почты по расписанию?
Или, может быть, есть лучший вариант?
Или, может быть, есть лучший вариант?
Re: Урок 98. Service. Локальный биндинг
Как заставить работать GPS в service ? После выхода из приложения service работает, но координаты прекращают поступать