2015-09-12 5 views
1

Я ищу в обмен активных объектов между двумя процессами, однако документацией относительно часто тусклый, а иногда even incorrect.Каков правильный способ обмена активными объектами между процессами?

В частности, я смотрел в обмен объекты связующего вещества с помощью посылок. В документации указано.

Активные объекты

Необычной особенностью посылок является возможность чтения и записи активных объектов. Для этих объектов фактическое содержимое объекта не записывается, а записывается специальный токен, ссылающийся на объект. Когда вы читаете объект обратно из Parcel, вы не получаете новый экземпляр объекта, а скорее дескриптор, который работает на том же самом объекте, который был первоначально написан. Доступны две формы активных объектов.

Объекты связующего являются основным средством общей системы межпроцессного взаимодействия Android. Интерфейс IBinder описывает абстрактный протокол с объектом Binder. Любой такой интерфейс можно записать на парцеллу, и после прочтения вы получите либо исходный объект, реализующий этот интерфейс, либо специальную реализацию прокси, которая связывает обратные вызовы с исходным объектом. Используемые методы: writeStrongBinder (IBinder), writeStrongInterface (IInterface), readStrongBinder(), writeBinderArray (IBinder []), readBinderArray (IBinder []), createBinderArray(), writeBinderList (List), readBinderList (List), createBinderArrayList() ,

Однако при получении посылки возвращенный объект представляет собой просто BinderProxy, который нельзя отнести к исходному классу или реализовать любые вызовы за пределами основных вызовов IBinder. Хотя это, очевидно, прокси-объект, о котором идет речь в документации, мне было интересно, что этот метод предназначен для ссылки на исходный объект, о котором упоминалось в том же самом заявлении.

Мне также интересно, был ли источник, где эта тема была более подробно объяснена или задокументирована.

ответ

-2

Вы должны быть способны передать объекты в исходный класс, учитывая, что он правильно реализует интерфейс Parcelable. Кастинг это просто так:

// in ProcessDataActivity retrieve User 
Intent intent = getIntent(); 
ParcelableObjectExample usr = (ParcelableObjectExample) 
    intent.getParcelableExtra("parcelableExample"); 

Для этого, чтобы быть успешным, вы должны правильно реализовать Parcelable интерфейс на ParcelableObjectExample, для этого вам необходимо:

  1. Реализовать его метод describeContents
  2. Реализовать свой реферат метод writeToParcel, который принимает текущее состояние объекта и записывает его на партию
  3. Добавить статическое поле CREATOR в наш класс, являющийся объектом, реализующим интерфейс Parcelable.Creator
  4. Добавить конструктор, который принимает параметр «Посылка». CREATOR вызывает этот конструктор для восстановления нашего объекта.
+0

К сожалению, используя подобный способ, маршалы класса затем отключают его, когда он извлекается, что означает, что объект просто воссоздается в новом процессе, а не является активным объектом. – Beryllium