【发布时间】:2015-03-07 06:06:31
【问题描述】:
在运行时,我使用回调模式来运行通用代码,并在完成后使用回调在 GUI 上执行代码。所以在我的处理程序中,我使用 runOnUiThread 函数来处理回调。
这些都是异步 http 调用。在运行时,如果我中断并使用后退按钮并转到另一个片段,例如,系统将换出片段并运行两个回调(新片段一个在正确的回调上,旧的回调应该在旧的新的当前片段上的片段)。这是错误的,新片段获得了两个回调,但是当它被初始化时,它被分配给了另一个片段......
这没有任何意义,您只能通过在异步调用完成之前在运行时切换片段来观察行为。我看不出这怎么可能,在代码中我检查回调是否为空,所以它应该被垃圾收集以及它如何在新的回调上运行我不知道它是怎么可能的......没有额外的分配发生改变这一点。这几乎就像它只是在内存中查找函数签名并运行它,即使它运行在错误的对象上。
有人知道发生了什么吗?我用一个丑陋的代码来压制它,我只是不知道这怎么可能?
我知道如果我在某个地方再次分配它,那么明显的候选人是,但答案是否定的。创建片段时,它会创建一个对象,将自己分配为回调,然后开始处理,因此当片段被销毁时,它也应该被销毁。但是异步任务仍在执行,这很好,为什么它在主gui上的新线程上进行回调我猜是因为runOnUiThread,所以该函数以某种方式改变了回调对象在内存中指向的内容?
【问题讨论】:
-
如果没有发布任何代码,任何人都很难为您提供帮助。