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

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

Добавлено: 22 июл 2012, 23:00
damager82
В этом уроке:
- обмен данными в биндинге


Click here to read this article!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 03 сен 2012, 13:17
rezak90
в этом случае может ContentProvider нужно реализовать.

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

Добавлено: 03 сен 2012, 13:19
powercat
уууу....как сложно...неужели нельзя проще...
так контентпровайдер должен знать путь к базе тоже...а как его получить?

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

Добавлено: 03 сен 2012, 14:36
powercat
Через интент передаю в сервис путь к базе. В сервисе через

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

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

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

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

Добавлено: 03 сен 2012, 14:48
rezak90
так контентпровайдер должен знать путь к базе тоже...
мне приходит в голову такая схема: пишется сервис в сервисе реализовывается контент провайдер который в свою очередь реализовывает связь с бд, соответственно сервис работает себе скрыто от пользователя и может давать любые сигналы твоему приложению в нужный момент, и приложение может отзыватся сервису командами которые будут идти в бд. В общем приложение общается с сервисом, а сервис с контентпровайдером, провайдер с бд... замудренно то как)))
или может и есть возможность (просто я не знаю) реализовать бд в сервисе

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

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

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

Добавлено: 03 сен 2012, 15:15
rezak90
наверное хелпер прикручивается так же само как и к приложению. Или я не прав...

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

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

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

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

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

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

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