Я читал сайты разработчиков Android о Parcels и AIDL, но у меня все еще есть вопрос. Почему объект Parcelable может быть возвращен из метода интерфейса AIDL, но не может быть передан в качестве параметра в метод AIDL? Я знаю, что методы интерфейса AIDL требуют примитивных типов данных (как указано на веб-сайте разработчика Android), но я могу передать объект Uri в качестве параметра - так почему я не могу передать объект Parcelable?
Использование посылок AIDL
comment
Ваши последние три предложения (не считая «Спасибо») относятся к этому, и неясно, что вы думаете об этом.
- person CommonsWare   schedule 03.10.2011
Ответы (1)
Вы можете передавать объекты, подлежащие разделению, с помощью AIDL. В документах говорится: «Если у вас есть класс, который вы хотите отправить из одного процесса в другой через интерфейс IPC, вы можете это сделать. Однако вы должны убедиться, что код вашего класса доступен для другой стороны IPC. канал, и ваш класс должен поддерживать интерфейс Parcelable».
http://developer.android.com/guide/components/aidl.html#PassingObjects
person
satur9nine
schedule
03.10.2011
Да я это читал. Однако, когда я пытаюсь использовать объект Parcelable в качестве параметра, файл AIDL выдает ошибку. С другой стороны, у меня нет проблем с его использованием в качестве возвращаемого типа для функций интерфейса. Из того, что я читал в другом месте, его нельзя использовать в качестве параметра in.
- person jjNford; 05.10.2011
На данный момент я продвинулся вперед, не используя их, но могу вернуться к этому позже. Таким образом, у меня больше нет кода, но я обязательно опубликую ошибку, которую получу, когда вернусь к этому.
- person jjNford; 05.10.2011
@satur9nine, можем ли мы объявить метод, как показано ниже, в .aidl void sendMessageParcelable (приложение String, посылка Parcelable)
- person umesh; 11.09.2015
@umesh Я не верю, что использование самого Parcelable будет работать, поскольку Android ожидает, что тип параметра будет не только реализовывать Parcelable, но и иметь CREATOR. См. developer.android.com/reference/android/os/Parcelable.html< /а>. Также кажется, что цель использования AIDL нецелесообразна, если вы отправляете сам Parcelable, поскольку он не имеет конкретного значения. Вместо этого вы можете рассмотреть возможность использования ContentProvider#call, если вам нужно гибкое синхронное решение IPC.
- person satur9nine; 11.09.2015