【问题标题】:Fragments, setRetainInstance(true), and threaded libraries片段、setRetainInstance(true) 和线程库
【发布时间】:2011-05-13 18:53:23
【问题描述】:

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

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

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

但是,如果您使用的是线程库(例如,使用线程执行器的 API 库),而您无权访问所述线程上的 wait(),我们如何使用此新功能我们的优势?

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

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

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

【问题讨论】:

  • 为什么 Loader 不适合登录过程?基本上,任何事情都可以在 ASyncTask 中执行,并打包到 Loader 中。 LoaderCallbacks 接口可用于在任务完成时获得通知。假设您想在登录完成后启动另一个 Activity,将 Activity start 放入 onLoadFinished() 应该可以正常工作,不是吗?如果没有,请详细说明。

标签: android android-fragments


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多