java - 在不实现 Serializable 或 Parcelable 的情况下在 Intent 中传递对象引用

标签 java android android-intent android-activity reference

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

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

因为我的应用程序会连续多次广播同一个事件,所以我不能依赖静态成员。我需要为我广播的内容获取完全相同的对象。

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

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

最佳答案

您的选择非常明确:无法在 Intent 中传递不可编码的对象(Parcelable、Serializable)。句号。

您可以做的是传递一些对不可编码对象的引用。这个想法是,您将按照将键传递给映射的顺序执行某些操作,该映射将该键映射到您有兴趣传递的值。如果 Intent 发送者和 Intent 接收者都可以访问 map ,您可以传达对不可编码对象的引用。

我不明白为什么您认为静态成员不是您想要的。我猜想自定义应用程序对象中的静态 map 几乎正是您想要的。 ...我怀疑,根据您对 WeakHashMaps 的评论,您已经发现了这一点。

... 除了您到目前为止所说的没有任何内容可以解释为什么要使您的 map 变弱。在使用弱映射之前,请查看软引用,以确保这不是您的意思。

祝你好运

关于java - 在不实现 Serializable 或 Parcelable 的情况下在 Intent 中传递对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14917029/

相关文章:

java - 在android中将字符串转换为日期的最佳方法

java - 获取文件夹内的目录名称?

Android 文本放置

android - 下载管理器下载文件

Android:ACTION_BATTERY_LOW 未在模拟器中触发。接收器在代码中注册,而不是 list

java - 从我的应用程序关闭应用程序

java - Spring Boot 执行器 MySQL 数据库健康检查

java - 这个 el 表达式有什么问题?

java - Matlab:在没有 Matlab 编译器运行时的情况下使用 Java 类

android - 在 viewpager 上滑动时,选项卡选择器无法在上一个选项卡上单击