屏幕旋转中的AsyncTask - onRetainNonConfigurationInstance已弃用

6
我仍在寻找与AsyncTask和屏幕旋转相关的“正确”设计模式。我阅读了this commonsware blog post,其中链接到this code,但onRetainNonConfigurationInstance方法现已弃用。文档中的关键句子是“在切换到下一个活动期间不处理任何消息的保证简化了与活动对象一起使用...”,这是该方法所做的真正关键部分。我不认为它建议使用setRetainInstance()能够实现相同的目标。
我还看到了一些帖子,比如这个,它们的第一个答案实际上只涵盖了90%的用例,这只是一个糟糕的hack(即如果您的任务正在运行,然后来了一个电话,那么该解决方案将无法工作)。
建议查看此处的代码以获取AsyncTask示例,但除非我很迟钝,否则我没有看到它们在应用程序中的任何地方被使用(当使用google code上的搜索功能时)。
显然已经有很多人问过这个问题,但我没有看到最新的、正确的答案。如果存在一个答案,请回答并关闭重复,但至少请回答! :)

这是另一个链接,评论了相同的已弃用方法。


请看我的答案AsyncTaskLoader也被建议使用。 - Timmmm
2个回答

1

使用已弃用的方法本身并没有什么问题。如果您的AsyncTask非常关键,以至于您无法在方向更改时取消它并重新启动它,则应考虑使用服务。


1

它只在Honeycomb及以上版本中被弃用,在这些版本上它仍然可以正常工作。'新'方法是使用加载器(可以使用兼容库在pre-HC版本中获取)或保留片段。如果您调用setRetainInstance(),则实例将传递给新创建的活动(它们实际上使用compatibility library中的onRetainNonConfigurationInstance),因此它与您现在拥有的实例效果相同。


即使我使用了 Object x = setRetainInstance(true),但仍然存在问题,我不能使用它。我必须创建自己的 setRetainInstance() 方法,为什么? - Jeff Bootsholz
@RajuGujarati 什么?你看过这个方法的签名吗? - Display Name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接