1

我正在使用从 Activity A 到 Activity B 的 Intent 传递一个 Serializable 对象,但是当我在将对象放入 A 中的意图之前以及在 B 中检索它之后打印 object.toString() 方法时,我发现它们实际上是不同的实例。

这就是问题所在。我在不同的类和不同的线程中初始化了该对象的字段,当我将对象放入 Activity A 中的意图时,这些字段还没有准备好,但是当我检索它们时它们已经准备好了。但是,当我尝试在活动 B 中检索这些字段时,我发现它们是空的,因为检索到的对象是一个新实例。

我该如何解决这个问题?我不知道如何让主线程等到对象初始化任务结束(已经尝试过thread.join())。我基本上只需要将两个 ArrayList 从一个活动发送到另一个活动,除非我发送它们(即,将它们放入意图中)它们是空的,但是当它们被检索时它们已经被填充。

4

1 回答 1

0

当序列化一个对象时,它被翻译成一种形式,以后可以用来创建原始对象的语义相同的克隆。这当然是原始对象的不同实例。

我可以想到两种情况:

  • 您的活动 B 可以在没有您尝试通过 Intent 发送的信息的情况下运行。在这种情况下,Activity B 可以注册一个BroadcastReceiver,并且您的线程一旦完成,将通过LocalBroadcastManager广播数据
  • 如果没有该数据,您的活动 B 将无法运行,活动 A 运行生成该数据的代码,例如在AsyncTask中,并在任务完成后启动活动 B(这将在 onPostExecute() 方法中)。
于 2013-06-21T19:02:42.057 回答