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

Re: Урок 98. Service. Локальный биндинг

Добавлено: 08 май 2014, 16:16
Vovich
begemota писал(а):
Imalur писал(а):
etlt писал(а):Подскажите кто сталкивался:
код из примера на строчке
myService = ((MyService.MyBinder) binder).getService();
выходит ошибка приложения и полное зависание
Класс MyBinder в MyService существует, по идеи все должно работать, но "binder" почему то не приводится к MyService.MyBinder - ошибка
аналогичная ситуация. никто не подскажет - как это побороть?
была аналогичная проблема... решилось очень просто...
дело в том что сервис должен запускаться в основном потоке... почти наверняка уверен что Вы в манифесте при описании сервиса использовали android:process=":nameofbindingprocess"
уберите эту строчку - и все заработает
Такая же ошибка и строчки android:process=":nameofbindingprocess" в манифесте нет. :(

Re: Урок 98. Service. Локальный биндинг

Добавлено: 09 май 2014, 10:26
Vovich
упс-с
сам ошибочку допустил - все нормально работает

Re: Урок 98. Service. Локальный биндинг

Добавлено: 21 май 2014, 13:25
JuriBK
Я создал Service в Activity.
Почему при закрытии Activity убивается и Service?

Re: Урок 98. Service. Локальный биндинг

Добавлено: 28 окт 2014, 19:27
elron
Вопрос: как сервису узнать что активити закрыто/открыто (?) и можно ли отправлять ему интенты через броудкаст ? Предполагаю что перед закрытием активити нужно в onClose менять значение/флаг в сервисе, типа myService.canSendToAcMain = false; и т.о. сервис будет знать что отправлять не нужно. Такой код пригоден ?!

Re: Урок 98. Service. Локальный биндинг

Добавлено: 30 мар 2015, 14:57
GRAF_COLLIOSTRO
эммм... я так понимаю тема вечная... по поводу убийства сервиса разобрался немного. точнее пришёл к такому выводу:

никакие методы остановки сервиса корректно мгновенно его не останавливают. Если даже и останавливают то тут-же перезапуск... повтыкал логи и начал играть в кошки мышки. Как я понял сервис получает команду на смерть и после этого система его может убить (не факт что мгновенно). Если активити вызвавшее сервис ещё живо... может уже дестрой, но не очищено из памяти, то сервис не убивается... Кнопка назад естессвтенно не убивает активити и ситуация такая же... в итоге решил откровенно забить на живучесть сервиса. Я сделал stopself и достаточно. По мере тасования ресурсов в памяти он рано или поздно умрёт. пусть и не мгновенно. На этом месте я смирился)))

теперь у меня другое) - у меня блютусовские команды обмена вынесены в сервис. там сидят все стримы и прочая...
запускаю сервис в onCreate активити... сервис на onCreate подготавливает сокет и стримы... дальше биндинг... всё замечательно, НО!!!

не соображу как победить наклон андройда(((

новое активити запускает новый сервис. их становится ДВА(

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

короче я запутался и вас сейчас запутаю(((

вопрос звучит просто: как переконнектится из нового активити к существующему сервису не убивая сервис при наклоне девайса???

крышу уже сносит от методов старта и передачи данных туда сюда(((

Re: Урок 98. Service. Локальный биндинг

Добавлено: 31 мар 2015, 07:28
klblk
Насколько я знаю 2 одинаковых сервиса запустить нельзя. Во второй раз вызовется onStartCommand(), но onCreate() сервиса вызываться не будет. И об этом есть в уроках (самый первый по сервисам).

Re: Урок 98. Service. Локальный биндинг

Добавлено: 31 мар 2015, 10:00
GRAF_COLLIOSTRO
если я в onDestroy активити захлапываю сервис, то запускается новый onСreate... но логи из первого незахлопнутого продолжают какоето время идти...

меня не устраивает то, что на onСreate сервис заново начинает коннектится к блютусу... мне нужно чтобы он не убивался, а новое активити к нему цеплялось и биндило его дальше...

и ещё нужно чтобы при выходе из программы всёжтаки и сервис отключался... - это вот всю логику порттит)))

в итоге получается каша с состояниями одного и другого... ничего умнее не придумал как создать флаг и запихать его в preference

если кто подскажет что-то умнее буду безумно рад

Re: Урок 98. Service. Локальный биндинг

Добавлено: 31 мар 2015, 10:40
klblk
Так зачем вы его убиваете в активити?
Запустите его один раз в onCreate() (startService()).
bind/unbind в onStart()/onStop()
В onDestoy() уничтожаете сервис только в случае если активити явно закрывается (if(isFinishing()))

Re: Урок 98. Service. Локальный биндинг

Добавлено: 31 мар 2015, 11:20
GRAF_COLLIOSTRO
klblk писал(а):...
вооот... вот это и хотел услышать!!! спасибо! пойду мучать. выглядит очень логично)

Re: Урок 98. Service. Локальный биндинг

Добавлено: 17 май 2015, 16:17
Sergiy_GT
Добрый день!
Уменя такой вопрос: В Service играет MediaPlayer, а кнопки управления находятся в разных Activity. И при нажатии, допустим, на кнопку "Play/Pause" её иконка меняется на соответствуюшую. Но при переходе на другую Activity или смену ориентации экрана создаётся ситуация когда - MediaPlayer выключен а иконка отображает что включён и может быть наоборот, что MediaPlayer играет а иконка показывает что он выключен. Следовательно есть необходимость мониторить состояние MediaPlayer в Service и передавать его состояние в Activity, чтобы та должным образом устанавливала иконки на кнопку. Так вот подскажите как это можно риализовать? Возможно есть другие варианты?

Re: Урок 98. Service. Локальный биндинг

Добавлено: 18 май 2015, 05:27
GRAF_COLLIOSTRO
вариантов масса... если сильно не заморачиваться, то можно создать перемнную в преференс, и хранить в ней состояния плейера... в разных активити доставать её и соответсвенно менять иконки.... или можно написать свой метод в сервисе, который бы мониторил плейер и возвращал бы его состояния в активити...

суть в следующем: закодируйте состояния плейера: 0 - молчит. 1 - воспроизводит, 2 - пауза и тд... что там ещё бывает? в стринг можно запихать что именно он воспроизводит... учитывая, что у сервиса свои переменные, а у активити свои, нужно реализовать связку. детский метод - это преференсес... внутри одного пака доступ к нему имеют все - сервис сохраняет, активити достаёт и читает.

Re: Урок 98. Service. Локальный биндинг

Добавлено: 18 май 2015, 17:39
Sergiy_GT
Я 2 месяца как только начал изучать андроид программирование, что значит "закодируйте состояния плейера: 0 - молчит. 1 - воспроизводит, 2 - пауза и тд..." - как это риализовать? И "у сервиса свои переменные, а у активити свои, нужно реализовать связку" - я непонимаю как это сделать. Можно подробние, с кодом.

Re: Урок 98. Service. Локальный биндинг

Добавлено: 20 май 2015, 06:35
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. Локальный биндинг

Добавлено: 20 май 2015, 14:22
Sergiy_GT
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. Локальный биндинг

Добавлено: 05 авг 2015, 19:54
netfinity
Можно ли по данному примеру подключившись к сервису изменить публичну стринг сервиса?
или биндиг изменяет только то, что работает в онстарткоманд?

Re: Урок 98. Service. Локальный биндинг

Добавлено: 07 авг 2015, 13:45
K_Vladimir
Доброго дня.

Я конечно могу ошибаться но по поводу останова сервиса, пока
поток tTask не завершишь, сервис так и перезапускается.
Но даже после этого в мониторе процессов он висит. Пока не остановишь.

Код: Выделить всё

@Override
    protected void  onDestroy(){
        super.onDestroy();
        if(isFinishing()) {
            if (myService.tTask != null) myService.tTask.cancel();
            stopService(intent);
        }
    }
Но мне кажется что так останавливать не правильно.
И единственно правильно его остановить, это устроить проверку завершения программы
в методе run()

И ещё вопрос: tTask в главном потоке отрабатывает или нет?

Re: Урок 98. Service. Локальный биндинг

Добавлено: 07 апр 2016, 14:13
Yennefer
Всем привет.

Подскажите, пожалуйста, правильно ли я поняла, что при использовании локального биндинга, т.е. когда Сервис запущен в одном процессе с Активити, при закрытии Активити сервис всегда убивается и нет никакой возможности обеспечить его жизнь за пределами Активити?
Использую стороннюю библиотеку, которая предоставляет сервис, заточенный только под локальный биндинг.

Re: Урок 98. Service. Локальный биндинг

Добавлено: 08 май 2016, 16:52
NatNiM
Подскажите, пожалуйста, а можно ли использовать timer для проверки почты по расписанию?
Или, может быть, есть лучший вариант?

Re: Урок 98. Service. Локальный биндинг

Добавлено: 06 янв 2020, 13:14
Davydov
Как заставить работать GPS в service ? После выхода из приложения service работает, но координаты прекращают поступать