Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
1

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

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

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

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

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


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

Добавлено через 20 минут
тащемта вопрос снят: класлоадеры разные, инстансы тоже будут разные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2012, 16:06
Ответы с готовыми решениями:

Странный факт
Здравствуйте. У меня 2 приложения, одно весит 6,5 МВ, а другое – 12. Способ...

Факт оплаты покупки в приложении - где хранить?
Посоветуйте пожалуйста: где лучше хранить факт покупки в приложении. Т.е....

Seagate интересный факт
Всем доброго времени суток. Мне вот интересно... у меня за жизнь было всего 2...

Позиционирование элементов - интересный факт.
Добрый день! При решении одной задачи наткнулся на интересный факт. Есть у нас...

remote service installation
как можно на удаленном компе установить сервис (или вообще запустить что-либо) ...

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

не могу найти компонента Remote Installation Service ( RIS)
Всем привет . Поставил на virtualbox windows server 2003 . Пытаюсь настроить...

Обработка сервиса и запуска [Service Application]
Доброго дня юзеры, собственно, взял из инета такой кусок кода, для управления...

Создание Android Service (background application) на Qt (QML)
Доброго времени суток, друзья. Помогите разобраться с проблемой. Есть рабочее...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru