#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.