Использование посылки AIDL

#android #parcelable #aidl

#Android #рассылаемый #aidl

Вопрос:

Я читал сайты разработчиков Android о посылках и AIDL, но у меня все еще есть вопрос. Почему объект, подлежащий отправке, может быть возвращен из метода интерфейса AIDL, но не передан в качестве параметра в метод AIDL? Я знаю, что методы интерфейса AIDL требуют примитивных типов данных (как указано на веб-сайте разработчика Android), но я могу передать объект Uri в качестве параметра — так почему я не могу передать объект, подлежащий отправке?

Комментарии:

1. Все ваши последние три предложения (не считая «Спасибо») относятся к «этому», и неясно, что вы думаете об «этом».

Ответ №1:

Вы можете передавать объекты, подлежащие отправке, с помощью AIDL. В документах говорится: «Если у вас есть класс, который вы хотели бы отправить из одного процесса в другой через интерфейс IPC, вы можете это сделать. Тем не менее, вы должны убедиться, что код для вашего класса доступен для другой стороны канала IPC, и ваш класс должен поддерживать интерфейс Parcelable. «

http://developer.android.com/guide/components/aidl.html#PassingObjects

Комментарии:

1. Да, я прочитал это. Однако, когда я пытаюсь использовать объект Parcelable в качестве параметра, файл AIDL выдает ошибку. С другой стороны, у меня нет проблем с использованием его в качестве возвращаемого типа для функций интерфейса. Из того, что я читал в другом месте, его нельзя использовать в качестве параметра in.

2. На данный момент я продвинулся вперед, не используя их, но, возможно, вернусь к этому позже. Таким образом, у меня больше нет кода, но я обязательно опубликую ошибку, которую получу, когда вернусь к этому.

3. @satur9nine можем ли мы объявить метод, подобный приведенному ниже, в .aidl void sendMessageParcelable(строковое приложение, рассылаемая посылка)

4. @umesh Я не верю, что использование самого Parcelable будет работать, поскольку Android ожидает, что тип параметра не только реализует Parcelable, но и имеет СОЗДАТЕЛЯ. См. developer.android.com/reference/android/os/Parcelable.html . Также кажется, что это противоречит цели использования AIDL, если вы отправляете сам Parcelable, поскольку он не имеет конкретного значения. Вы можете рассмотреть возможность использования ContentProvider#call вместо этого, если вам нужно гибкое синхронное решение IPC.