片段,setRetainInstance(true)和线程库

在这里 ,Dianne说通过onRetainNonConfigurationInstance()保留对象的旧方法现在已经过时了,因为你可以通过configuration改变来保留Fragment实例。

在这里 ,在片段的API演示中,它展示了如何在configuration更改后使用此方法维护线程。

我发现,在configuration更改期间,如果Fragment可能没有附加到任何活动,并且线程完成了它的工作,则可以调用wait()以便它不会尝试传递结果,而Activity不是连接。 我发现这非常有用,也是一个很好的方法来缓解Android方向更改中的一个更为棘手的问题。

但是,如果您使用的是线程库(例如,使用线程执行程序的API库),则无法在所述线程上wait() ,我们如何才能使用这个新function?

我们如何确保消息不会在没有附加活动的情况下传递?

我一直在想一种方法,可能会排队消息,并在附加新的活动时交付,但我想打你们,看看你是否已经想出了一些解决scheme。

另外请注意,我查看了LoaderManager API,看起来好像是显示一个Activity时需要加载的数据,而不是基于事件的事件,比如通过buttonlogin等等。

您可以使用更高级别的并发实用程序(例如Latch)来解决此问题,您可以让所有线程等待,直到附加新的活动(就在他们尝试访问消息队列以提供结果之前)。

一旦附加活动,您可以释放locking,允许所有线程提供其结果。