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

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

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

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

05.09.2012, 16:06. Просмотров 1785. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интересный факт о Application и Service :remote (Программирование Android):

Странный факт - Программирование Android
Здравствуйте. У меня 2 приложения, одно весит 6,5 МВ, а другое – 12. Способ отрисовки графики (Canvas - public class GameView extends...

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

Seagate интересный факт - Жесткие диски
Всем доброго времени суток. Мне вот интересно... у меня за жизнь было всего 2 сигейта и в обоих случаях первый LBA при проверке HDD Scan...

Позиционирование элементов - интересный факт. - HTML, CSS
Добрый день! При решении одной задачи наткнулся на интересный факт. Есть у нас такой html-код: <div id="outer"> <div id="inner"> ...

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

не могу найти компонента Remote Installation Service ( RIS) - Windows Server
Всем привет . Поставил на virtualbox windows server 2003 . Пытаюсь настроить tftp по следующему алгоритму : Настройка TFTP Server ...

8
V0v1k
1159 / 983 / 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
1159 / 983 / 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
1159 / 983 / 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
1159 / 983 / 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
Привет! Вот еще темы с ответами:

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

Можно ли в одно service application добавить несколько сервисов? - Delphi
доброго времени суток, у меня есть служба написанная для проверки доступности сервера в случае отсутствия ответа меня запись днс и...

Как создать процесс (MFC application *.exe) из c# Windows Service? - C#
сервис создается, инсталлируется из запускается фактически кнопкой мыши, новый процесс создается также. но это - поотдельности. если мы...

Написать Service Application, что бы этот сервис висел в службах и работал - C++ Builder
Доброго времени суток друзья. Создал Service Application прога компилируеться в *.exe, открываеться и сразу закрываеться. Как мне...


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

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

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