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

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 22 июл 2012, 23:00

В этом уроке:
- обмен данными в биндинге


Click here to read this article!
Последний раз редактировалось damager82 22 май 2017, 23:47, всего редактировалось 4 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 30 авг 2012, 15:48

Жесть ))) я нихрена не понял....)))
Предлагаю в каждом уроке добавить пример реального применения, иначе совершенно неясно, что для чего (((

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 30 авг 2012, 16:18

powercat
По твоим постам, ты хочешь задействовать сервис, но не понимаешь для чего. Как только появится понимание, зачем тебе выделять часть кода в отдельный сервис, так сразу все станет на свои места.
Самая простая аналогия Активити и Сервисов:
Ативити, это окно браузера пользователя, а Сервис это сайт, находящийся на удаленном сервере. Пользователь производит действия в браузере, браузер генерирует запрос серверу, а тот выполняет код и выдает запрошенный результат. Если работал с технологией AJAX, то вообще просто станет в понимании.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 30 авг 2012, 16:47

Я понимаю клиент-серверную технологию )))
Но вот применительно к последним урокам, то все, кроме Уведомления, для меня как-то...ээ...не знаю...не имеет смысла что-ль, кроме как ПРИМЕР работы сервиса в разных ситуациях...вот эти ситуации и хочу понять...Поясню - какой смысл что-то выносить в сервис кроме уведомлений? Ведь приложение ОТКРЫТО и все можно сделать в нем, зачем еще приплетать сервис? А с уведомлением все ясно - приложение закрыто, сервис крутиться, в определенное время что-то выполняет, может открыть приложение (вроде), может не только уведомить, но и всякие так штуки выполнить...но самостоятельно...поэтому у меня и возникает необходимость в пояснении - для чего одновременно надо работать и приложению, и сервису...

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 30 авг 2012, 17:45

powercat
Для меня лично, это возможность создать службу, которая будет работать в фоне и к примеру синхронизировать данные с интернетом.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

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

Сообщение Mikhail_dev » 30 авг 2012, 17:52

В нашем проекте сервис работает с GPS, интернетом, базой данных. Это дело исключительно фоновой службы, какой он и является. Он подгружается с запуском телефона и независим от активностей, ибо активность это уже отдельная пьесса, либо другими словами: у неё логика ПОДКЛЮЧАТЬСЯ к сервису. Сервис может открыть когда надо её, уведомить её. Да и вообещ всё что надо сделать. Сервису можно повысить приоритет почти до уровня активности, что также является немаловажным фактором. Думаю вкратце ответил на ваш вопрос.
Ведь приложение ОТКРЫТО и все можно сделать в нем
Не понял. Можно поподробней?

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 30 авг 2012, 18:33

Чтобы распараллелить задачу и не подвешивать UI поток какими-либо сложными вычислениями, или ожиданиями ответа от сервера, длительными операциями с файлами и т.п. обычно прибегают к Threads либо AsyncTask, но они после выполнения кода заканчивают свое существование, чтобы этого не происходило организовывают бесконечные циклы (Loopers). Сервис в отличии от них может жить и после выполнения кода, сохраняя все свои локальные данные, т.е. он уже имеет свой собственный looper и может выполнять определенные задачи по требованию без повторных инициализаций.
Для каких-то разовых вычислений лучше использовать AsyncTask, а если нужно выполнять периодически определенные задачи в фоне (обработку периодически поступающих данных) не в UI потоке, то может быть удобно использовать сервисы.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 30 авг 2012, 20:09

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

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 30 авг 2012, 20:55

powercat писал(а):А годится ли сервис для этого - не только кинуть уведомление юзеру, но и обратиться к базе, созданной в приложении, и изменить в ней данные?
Годится.

etlt
Сообщения: 8
Зарегистрирован: 30 авг 2012, 20:19

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

Сообщение etlt » 31 авг 2012, 12:41

Подскажите кто сталкивался:
код из примера на строчке
myService = ((MyService.MyBinder) binder).getService();
выходит ошибка приложения и полное зависание
Класс MyBinder в MyService существует, по идеи все должно работать, но "binder" почему то не приводится к MyService.MyBinder - ошибка

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 03 сен 2012, 12:57

neoksi писал(а):
powercat писал(а):А годится ли сервис для этого - не только кинуть уведомление юзеру, но и обратиться к базе, созданной в приложении, и изменить в ней данные?
Годится.
А как обратиться к базе из сервиса? Сервис же не видит путь к базе (она не по умолчанию создана, а по кастомному пути). А путь сидит в приложении, которое закрыто, когда работает сервис. А в явном виде путь к базе не могу задать, т.к. он определяется от того, где встало приложение.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 03 сен 2012, 13:17

в этом случае может ContentProvider нужно реализовать.
R.id.team
Политика на форуме запрещена

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 03 сен 2012, 13:19

уууу....как сложно...неужели нельзя проще...
так контентпровайдер должен знать путь к базе тоже...а как его получить?

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 03 сен 2012, 14:36

Через интент передаю в сервис путь к базе. В сервисе через

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

db=SQLiteDatabase.openOrCreateDatabase(pathToDB, null);
из базы получаю данные. Все работает.

Как теперь это же сделать через Хелпер? Он уже есть в приложении в виде отдельного файла. Пробовал засунуть его в код сервиса - посыпались ошибки. Как пользоваться хелпером в сервисе?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 03 сен 2012, 14:48

так контентпровайдер должен знать путь к базе тоже...
мне приходит в голову такая схема: пишется сервис в сервисе реализовывается контент провайдер который в свою очередь реализовывает связь с бд, соответственно сервис работает себе скрыто от пользователя и может давать любые сигналы твоему приложению в нужный момент, и приложение может отзыватся сервису командами которые будут идти в бд. В общем приложение общается с сервисом, а сервис с контентпровайдером, провайдер с бд... замудренно то как)))
или может и есть возможность (просто я не знаю) реализовать бд в сервисе
R.id.team
Политика на форуме запрещена

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 03 сен 2012, 15:08

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 03 сен 2012, 15:15

наверное хелпер прикручивается так же само как и к приложению. Или я не прав...
R.id.team
Политика на форуме запрещена

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 03 сен 2012, 15:23

В приложении я его в отдеьлном файле сделал, а в сервисе засовываю внутрь него ))) Логично б, закрыл приложение, т.е. приложенский хелпер более не доступен и работает сервисный...новотвамхрен...не работает ((( и имя поменял хелперу на отличное от приложенского...Правда момент, когда существуют оба - приложение еще открыто, а сервис стартует...фиг знает, что придумать...

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 03 сен 2012, 18:08

Велосипед однако изобретаем?
Принципиально все работает так:
1) Приложение - > Контент провайдер - > Хелпер БД
2) Сервис - > Контент провайдер - > Хелпер БД
3) Приложение - > Вызов сервиса

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

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 04 сен 2012, 15:17

Я не понимаю, куда надо пихать код хелпера ((( и куда провайдера...
Из приложения база заполняется и приложение закрывается. Далее с базой работает сервис, который ее читает и редактирует. Исходя из этого - куда пихать коды? )))

Ответить