Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
#1

Интересный факт о Application и Service :remote - Android

05.09.2012, 16:06. Просмотров 1697. Ответов 8
Метки нет (Все метки)

Значит берём создаём тестовый примерчик:
Активити
Сервис

Биндимся из активити к сервису и через месенджер шлём сообщения сервису как здесь.
Потом берём такие и экстендим класс android.app.Application (назовём его к примеру TestApp)и прописываем в манифесте имя заэкснедженого нами апликейшна.
Всё работает нормально, сервис биндится сообщения шлются.
Далее, дописываем к сервису в манифесте androidrocess=":remote" что бы сервис работал в отдельном процессе и видим следующую картину:
при запуске прилаги вызывается onCreate у заэкстендженого нами TestApp класса. далее берём и жмём на кнопочку после чего происходит бинд(самый первый) к сервису и создаётся новый процес в системе (@default_process_name%:remote) в котором работает наш сервис и в этот самый момент пересоздаётся TestApp!!!
Может мне кто нибудь обьяснить почему так происходит(хотя я и сам догадываюсь) и самое главное - как этого избежать и при этом иметь возможность запускать сервис в отдельном потоке?
Без апликейшн класса обходится будет трудно и некрасиво. Сервис должен тоже рабоать в отдельнои процессе так как на него возложена задача играть музыку (я думаю понимаете почему не стоит пускать его в общем процессе).

PS: если убрать :remote из манифеста - Апликейшн класс не пересоздаётся и всё ок.


Добавлено через 37 минут
ПОПРАВКА:
Апликейшн не пересоздаётся а создаётся ещё один инстанс данного класса.

Добавлено через 20 минут
тащемта вопрос снят: класлоадеры разные, инстансы тоже будут разные.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2012, 16:06     Интересный факт о Application и Service :remote
Посмотрите здесь:

Android Интересный ЛистВью
Android Странный факт
Android GPS service
Android SQLite в Service
Android Fragments и service
Факт оплаты покупки в приложении - где хранить? Android
Service Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.09.2012, 18:06     Интересный факт о Application и Service :remote #2
Цитата Сообщение от YAUHEN Посмотреть сообщение
: класлоадеры разные, инстансы тоже будут разные.
можно поподробней?
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
05.09.2012, 18:39  [ТС]     Интересный факт о Application и Service :remote #3
В андройде на каждый процесс свой класслоадер соответственно нельзя просто так взять и юзать один и тот же обьект между процессами. боромир.png
Миниатюры
Интересный факт о Application и Service :remote  
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.09.2012, 19:26     Интересный факт о Application и Service :remote #4
ну вы же юзаете из сервиса iBinder вне зависимости отдельный это процесс или нет...
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
05.09.2012, 19:31  [ТС]     Интересный факт о Application и Service :remote #5
ну так IBinder, Parcel и прочее явялется частью IPC который как бы для этого (межпроцесового взаимодействия) и предназначен.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.09.2012, 19:35     Интересный факт о Application и Service :remote #6
и что? это один объект (произвольного класса) который вы юзаете между процессами, а вы говорите, что такое нельзя делать....
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
05.09.2012, 19:50  [ТС]     Интересный факт о Application и Service :remote #7
ну на сколько я понимаю - биндер реальизует интерфейс уадлённого вызова процедур или что то в этом роде и как бы является "интерфейсом", а всё остальное продуманно и реальизованно в платформе, в то время как для программиста-клиента это выглядит как один обьект. но это лишь мои предполажения.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.09.2012, 20:40     Интересный факт о Application и Service :remote #8
в качестве биндера отправляется любой свой объект, зачастую это сам сервис.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 00:00     Интересный факт о Application и Service :remote
Еще ссылки по теме:

Android App Service
Автозагрузка Service Android
SQLite из Service Android
GetContentResolver() внутри service Android
Работа с Service Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
06.09.2012, 00:00  [ТС]     Интересный факт о Application и Service :remote #9
ну а вы попробуйте набросать тестовый примерчик с сервисом в отдельном потоке(IPC без AIDL) и сравните хэшкоды обьекта IBinder в onBind в сервисе перед отправлением и в onServiceConnected на обратной стороне.
к слову если реализовывать классически через метод getService() в биндере (вместо врапера месенджера характероного для IPC) без IPC о котором вы писали - хэшкод будет естественно совпадать.
Yandex
Объявления
06.09.2012, 00:00     Интересный факт о Application и Service :remote
Ответ Создать тему
Опции темы

Текущее время: 12:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru