2010-03-18 3 views
1

У меня есть приложение App1, которое определяет класс A и использует экземпляры этого класса. То, что я хочу достичь, - после установки App1 на устройство, чтобы загрузить App2, который определяет и реализует класс B, который является подклассом класса A (импортируется из пакета App1); и иметь возможность получить экземпляр класса B в App1. Класс B не добавляет никаких новых интерфейсов, поэтому использовать его как класс A в порядке. Но я не уверен, как передать экземпляр класса B в App1 (желательно без какого-либо взаимодействия с пользователем).Передача экземпляров классов между приложениями в Android

Может ли кто-нибудь посоветовать, возможно ли это?

ответ

2

Взятый буквально, невозможно. App1 и App2 будут работать на разных виртуальных машинах, возможно, в разных процессах. Невозможно транспортировать объект между ними, больше, чем переносить объект Java между апплетом и сервером JavaEE.

Ваши варианты:

  1. Используйте удаленные сервисы и AIDL для реализации удаленного вызова процедур, фактически давая вам «пройти по ссылке» между приложениями
  2. Использование Parceable и Intent статистов, фактически давая вам «пройти мимо значение "между приложениями
+0

Благодарим вас за ответ! Очень полезно. Тем не менее, один вопрос для каждого из вариантов Мне нужно, чтобы у App1 был вид активности, запуска и взаимодействия с пользователем. И App2 (если возможно) должен быть полностью прозрачным для пользователя. Таким образом, App1 должен запросить, какой App2 установлен в системе, и попросить его предоставить экземпляр класса B. Итак. 1. (AIDL) Если App1 - это служба активности +, а App2 - это, например, BroadcastReceiver. Как App2 получить доступ к сервису? И если App2 также является Activity, как я могу убедиться, что сервис App1 будет продолжать работать, когда активность App2 запускается поверх App1? –

+0

2. (Parcelable), если App1 и App2 - оба действия - все ясно. Но если снова я хочу, чтобы App2 был BroadcastReceiver, как мне получить результат Intent от него? Должен ли я также создать BroadcastReceiver в App1? . Дополнительный вопрос: помимо маршалинга объектов между процессами можно создать экземпляр класса App2 из App1 (который эффективно будет помещать их в один процесс), а затем напрямую запросить, например, класс B. пришлось сломать его два комментария –

+0

Вам действительно нужно задавать такие вопросы, как новые вопросы. «BroadcastReceiver» имеет ограниченную возможность взаимодействия с Сервисами - он может вызывать 'startService()' и передавать данные через поставляемый «Intent», но это все. AIDL не является вариантом, и «BroadcastReceiver» не может получить результат, период. Я не знаю, какую бизнес-проблему вы пытаетесь решить, но IMHO ваша предлагаемая настройка кричит «над-архитектурой». – CommonsWare

Смежные вопросы