【问题标题】:AsyncTask with screen rotation - onRetainNonConfigurationInstance deprecated带屏幕旋转的 AsyncTask - onRetainNonConfigurationInstance 已弃用
【发布时间】:2011-12-24 02:11:44
【问题描述】:

在处理AsyncTasks 和屏幕旋转时,我仍在努力寻找“正确”的设计模式。我阅读了链接到this codethis commonsware blog post,但现在不推荐使用onRetainNonConfigurationInstance 方法。文档中的神奇语句指出“在切换到下一个活动期间不处理任何消息的保证简化了对活动对象的使用......”这是关于此方法的真正关键部分。我不认为它建议使用 setRetainInstance() 能够实现相同的目标。

我还看到了 such as this one 的帖子,其排名第一的答案实际上是一个糟糕的 hack,它仅涵盖 90% 的用例(即,如果您的任务正在运行,然后有电话打进来,该解决方案会发生什么情况不管用)。

建议查看 AsyncTask 示例的代码 here,但除非我很密集,否则我看不到它们在应用程序的任何地方使用(在 google 代码上使用 search feature 时)

这个问题显然已经被问过很多次了,但我还没有看到一个最新的、正确的答案。如果存在,请回答并关闭,如果必须的话,但至少回答! :)

This is another link 审查相同的已弃用方法。

【问题讨论】:

标签: java android multithreading android-asynctask


【解决方案1】:

它只在 Honeycomb 及更高版本上被弃用,它也可以在这些上正常工作。 “新”方法是使用加载器(您可以使用兼容性库来获取那些在 HC 之前的版本)或保留片段。如果您调用setRetainInstance(),实例将按原样传递给新创建的活动(它们实际上在兼容性库的FragmentActivity 中使用onRetainNonConfigurationInstance),因此它实际上与您现在拥有的相同。

【讨论】:

  • 但即使我使用 Object x = setRetainInstance(true) ,也存在无法使用的问题。我必须创建自己的 setRetainInstance() ,为什么?
  • @RajuGujarati 什么?你看过这个方法的签名吗?
【解决方案2】:

使用已弃用的方法本身并没有错。如果您的 AsyncTask 非常关键,以至于您无法取消它并在方向发生变化时重新启动它,那么您应该考虑使用服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多