android - fragment 、setRetainInstance(true) 和线程库

标签 android android-fragments

Here , Dianne 说通过 onRetainNonConfigurationInstance() 保留对象的旧方法现在已经过时了,因为您可以在配置更改时保留 Fragment 实例。

还有 here ,在 Fragment 的 API Demos 中,它展示了如何在配置更改后使用此方法维护线程。

我看到在配置更改期间,当 Fragment 可能没有附加到任何 Activity 并且线程完成它的工作时,它能够调用 wait() 以便它不会尝试在未附加 Activity 时交付结果。我发现这非常有用,并且是缓解 Android 方向更改带来的更令人头疼的问题之一的好方法。

但是,如果您使用的是线程库(例如,使用线程执行器的 API 库),而您无权访问所述线程上的 wait(),如何我们可以利用这个新功能来发挥我们的优势吗?

我们如何确保在未附加 Activity 时不会传递消息?

我一直在考虑一种方法,可以将消息排队并在附加新 Activity 时传递它们,但我想联系你们,看看你们是否已经提出了一些解决方案。

另外,请注意,我已经查看了 LoaderManager API,它似乎适用于显示 Activity 时需要加载的数据,但不适用于基于事件的东西,例如通过按钮登录等。

最佳答案

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

一旦 Activity 被附加,你就可以释放 Latch,让所有线程传递它们的结果。

关于android - fragment 、setRetainInstance(true) 和线程库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5996446/

相关文章:

java - 如何书写分离的阿拉伯字母?

android - 默认不打开抽屉导航

java - 如何让 RecyclerView onClick 在 Fragment 中工作

android - 如何以编程方式关闭不属于当前窗口的键盘

java - 当我完成结果的 Activity 时调用 OnCreate 和 onActivityResult

c# - 使用 MonoDroid 从相机访问全分辨率图片

android - 位置监听器在 Debug模式下工作但不在编译的 APK 中

java - 在(Espresso)Android 仪器测试中启动特定的导体 Controller

java - 将实时数据从主 Activity 发送到 fragment

android - 在 Android api 级别 27 中将 getContext() 覆盖为非空是个坏主意?