Averiguar qué camino tomar requiere responder no solo a la pregunta clave de CommonsWare de "por qué", sino también a la pregunta de "¿a qué?" lo estás pasando.
La realidad es que lo único que puede pasar por paquetes son datos simples; todo lo demás se basa en interpretaciones de lo que significan o apuntan esos datos. No puede pasar literalmente un objeto, pero lo que puede hacer es una de tres cosas:
1) Puede dividir el objeto en sus datos constitutivos, y si lo que está en el otro extremo tiene conocimiento del mismo tipo de objeto, puede ensamblar un clon a partir de los datos serializados. Así es como la mayoría de los tipos comunes pasan a través de paquetes.
2) Puede pasar un mango opaco. Si lo pasa dentro del mismo contexto (aunque uno podría preguntarse por qué molestarse), ese será un identificador que puede invocar o desreferenciar. Pero si lo pasa a través de Binder a un contexto diferente, su valor literal será un número arbitrario (de hecho, estos números arbitrarios cuentan secuencialmente desde el inicio). No puede hacer nada más que realizar un seguimiento de él, hasta que lo devuelva al contexto original, lo que hará que Binder lo transforme de nuevo en el identificador original, haciéndolo útil nuevamente.
3) Puede pasar un identificador mágico, como un descriptor de archivo o una referencia a ciertos objetos de sistema operativo / plataforma, y si establece las banderas correctas, Binder creará un clon apuntando al mismo recurso para el destinatario, que en realidad se puede usar en el otro extremo. Pero esto solo funciona para muy pocos tipos de objetos.
Lo más probable es que esté pasando su clase solo para que el otro extremo pueda realizar un seguimiento de ella y devolvérsela más tarde, o la está pasando a un contexto donde se puede crear un clon a partir de datos de constituyentes serializados ... o bien está tratando de hacer algo que simplemente no va a funcionar y necesita repensar todo el enfoque.