Чтобы понять, какой путь выбрать, необходимо ответить не только на ключевой вопрос CommonsWare «почему», но и на вопрос «к чему?» вы проходите мимо.
Реальность такова, что единственное, что может проходить через пакеты, - это простые данные - все остальное основано на интерпретации того, что эти данные означают или на что указывают. Вы не можете буквально передать объект, но вы можете сделать одно из трех:
1) Вы можете разбить объект на составляющие данные, и если то, что на другом конце знает об объекте того же типа, оно может собрать клон из сериализованных данных. Вот как большинство распространенных типов проходят через связки.
2) Можно передать непрозрачную ручку. Если вы передаете его в одном контексте (хотя можно спросить, зачем беспокоиться), это будет дескриптор, который вы можете вызвать или разыменовать. Но если вы передадите его через Binder в другой контекст, его буквальным значением будет произвольное число (фактически, эти произвольные числа считаются последовательно с момента запуска). Вы не можете ничего делать, кроме как отслеживать его, пока не передадите его обратно в исходный контекст, что заставит Binder преобразовать его обратно в исходный дескриптор, что снова сделает его полезным.
3) Вы можете передать волшебный дескриптор, такой как дескриптор файла или ссылку на определенные объекты ОС / платформы, и если вы установите правильные флаги, Binder создаст клон, указывающий на тот же ресурс для получателя, который фактически может быть использован на другой конец. Но это работает только для очень немногих типов объектов.
Скорее всего, вы либо передаете свой класс, чтобы другой конец мог отслеживать его и возвращать вам позже, либо вы передаете его в контекст, где клон может быть создан из сериализованных составляющих данных ... или иначе вы пытаетесь сделать что-то, что просто не сработает, и вам нужно переосмыслить весь подход.