在Intent中传递对象引用而不实现Serializable或Parcelable

我知道类似的问题已被多次询问。 我想我读了大部分。 但是没有答案是适用的。

我需要通过Intents(活动调用/广播)传递复杂的对象。 一切都在我的过程中完成。 这就是为什么我没有理由把我的对象写入Streams中,只是在几毫秒之后重新组装它们。 我想通过我的应用程序传递我的对象引用。 有没有办法做到这一点。

由于我的应用程序将连续多次广播相同的事件,我不能依靠静态成员。 我需要为我所播放的东西放弃同一个对象。

这就是为什么我在考虑一个静态的“Referenceholder”,它将接受一个Object,并返回一个在其内部列表中标识这个对象的整数,所以我可以通过.putExtras传递这个整数。 但据我所知,Java我无法清除这个对象从这个列表中添加后,因为多个Listener可以在同一个对象中进行交互,我将永远保留在我的Referenceholder(假设一个线程可以随时恢复 – 甚至2分钟后)。

有任何想法吗? 难道我做错了什么? 或者我可以如何清理我的引用(可能在几秒钟之后?这可能会导致崩溃,但它似乎更适用于编写无故组装和重新组装我的对象的代码)

Solutions Collecting From Web of "在Intent中传递对象引用而不实现Serializable或Parcelable"

你的选项非常清楚:在Intent中没有办法传递一个un-marshallable对象(Parcelable,Serializable)。 句号

你可能能做的是传递一些对非编组对象的引用。 这个想法是,你会按照传递一个键的顺序来做一些事情,把这个键映射到你感兴趣的值。 如果意图发件人和意图收件人都有权访问地图,则可以将引用传递给无法编组的对象。

我不明白,为什么你认为静态成员不是你想要的。 我猜想一个静态的地图,在一个自定义的应用程序对象,将几乎正是你想要的。 …我怀疑,从你对WeakHashMaps的评论中,你已经发现了这一点。

…除了你迄今为止所说的没有任何解释为什么你想使你的地图弱。 在使用弱映射之前,先看一下Soft引用,以确保这不是你的意思。

祝你好运

编辑:

忘掉这个解决scheme。 这是行不通的。 Android正在处理您通过.startActivity()传递的Intent。 在活动中没有任何参考。 这是 – 在我看来 – 伟大的不****我的谷歌。 您必须调用您的活动并将对象的引用放置在静态成员中

正如G. Blake Meike所提到的,在Android中没有办法通过Intents来传递Object引用。 但是你也可以使用WeakReferences 。

有关这个主题的非常优秀的aticle在这里find: http ://weblogs.java.net/blog/2006/05/04/understanding-weak-references

我通过这个问题得到了解决scheme: 是否有可能获得对象引用计数?

所以我基本上要做的是:我将使用Intents作为WeakHashMap的关键,并传递我的Object作为值。 这似乎是适合作为Key的唯一对象,因为你放入Intents extras的所有内容都将被序列化。 因此,每个意图只能传递一个对象。 你可以在你的Acitivity中实现Subclasses,它可以把你的Objects放到地图中。 但我仍然不确定接收者将得到的Intent对象是否与调用者创build的相同,但我认为是这样。 如果不是的话,我会编辑这个解决scheme(也许有人可以清除这个)。