Удаленный сервис Android в приложении по сравнению с отдельным приложением

Я пытаюсь выяснить плюсы и минусы написания удаленной службы Android как части моего клиентского приложения (используя android:process=":remote") по сравнению с созданием отдельного сервисного приложения.

В обоих случаях служба будет работать в своем собственном отдельном процессе и иметь собственную кучу и т. д. Однако должны быть некоторые различия, когда мы делаем ее отдельным приложением, поскольку у нее будет собственная изолированная программная среда приложения. Я нашел много примеров их использования и предпочтительных подходов в соответствии со сценариями, но я пытаюсь понять их внутренние технические детали.

Любой хороший источник информации об этом?

Изменить: каково будет влияние на объект/контекст приложения, если сервисный и клиентский процессы работают в одном и том же приложении. Будет ли он перезаписан одним из процессов? или будет два объекта приложения для каждого процесса, что звучит неправильно, будучи частью одного приложения.


person pree    schedule 16.01.2014    source источник
comment
Развертывание — одно из самых больших преимуществ хранения в одном приложении двух процессов. При развертывании в магазине приложений я бы не стал делать это по-другому. Зачем нужен удаленный сервис?   -  person Mike dg    schedule 17.01.2014
comment
@Mikedg Да, развертывание — это одна из причин, по которой вы хотели бы сохранить оба процесса в одном приложении, но дело не в том, почему мне нужна удаленная и локальная служба, а в том, что я пытаюсь понять общее внутреннее поведение, как я упомянул ниже. комментарии ответа.   -  person pree    schedule 17.01.2014
comment
Отредактировал и мой вопрос.   -  person pree    schedule 17.01.2014
comment
Будет ли android:process=: remote работать, если фоновые данные отключены или включен режим энергосбережения?   -  person Rajesh Nasit    schedule 30.09.2017


Ответы (1)


На ваш вопрос уже был частично дан ответ. Проверьте здесь:

Но если вы все еще думаете о том, чтобы что-то работало в фоновом режиме, вы можете взглянуть на эту ссылку:

Работа в фоновом режиме явно не лучший вариант. Если только вам по какой-либо причине это действительно не нужно. Поэтому позаботьтесь о том, чтобы не раздражать пользователя ненужными фоновыми службами, которые не были активированы сознательно по собственной воле пользователя. В таком случае создание отдельного приложения или функции, которая будет активирована пользователем, является более разумным и безопасным путем.

Если вам нужно написать службу, которая может выполнять сложную связь с клиентами в удаленные процессы (помимо простого использования Context.startService для отправки ему команд), то вы можете использовать класс Messenger вместо написания полных файлов AIDL. Если вам нужен только удаленный сервис, следуйте этому руководству.

person Avanz    schedule 17.01.2014
comment
Итак, если у приложения есть удаленная служба, объект приложения будет создан при запуске приложения, а при запуске службы он воссоздает объект приложения? Это так, у нас есть виртуальная машина Dalvik, на которой запущено одно приложение с двумя процессами и одним объектом приложения, который может меняться со временем в зависимости от запуска процесса, верно? Разве это не немного странно и неожиданно, потому что мы изначально запускаем удаленную службу из активности, используя объект приложения (getApplicationObject().startService()). Если объекты приложения будут перезаписаны, не испортит ли это всю среду приложения? - person pree; 17.01.2014
comment
Я уже просматривал эту ссылку ранее и играл с локальными/удаленными всеми типами сервисов. Я пытаюсь понять поведение объекта Context/application в случае удаленной службы как части самого клиентского приложения, как я только что объяснил выше. - person pree; 17.01.2014
comment
На самом деле ваша первая ссылка прояснила это, каждый процесс получит свой собственный объект приложения, поэтому они не будут связываться друг с другом. один объект приложения на процесс, а не на приложение/APK. - person pree; 17.01.2014