2011-11-08 25 views
6

我在处理AsyncTask和屏幕旋转时仍试图找到“正确”的设计模式。我读this commonsware blog post链接到this code,但现在不推荐使用onRetainNonConfigurationInstance方法。文档中的魔术语句“在切换到下一个活动期间保证没有消息处理,简化了活动对象的使用...”,这是该方法所做的真正关键部分。我没有看到它使用setRetainInstance()能够实现相同目标的建议。带屏幕旋转的AsyncTask - onRetainNonConfigurationInstance不推荐使用

我也看到帖子such as this one其头号答案真的没什么缺点,只包括90%的用例(即如果你的任务正在运行,然后打来电话会发生什么,该解决方案将不行)。

有人建议审查代码为here例子的AsyncTask,但除非我被密集的,我不认为他们会被任何地方使用的应用程序(谷歌代码使用search feature时)

这个问题有显然被问过很多次,但我没有看到一个最新的,适当的asnwer。如果存在的话,请回答并作为重复关闭,但必须回答! :)

This is another link哪些评论相同,不赞成使用的方法。

+0

请参阅[我的答案](http://stackoverflow.com/a/12303649/265521)。还提出了['AsyncTaskLoader'](http://developer.android.com/reference/android/content/AsyncTaskLoader.html)。 – Timmmm

回答

1

它只在Honeycomb及以上版本上被弃用,并且它对那些也会很好用。 '新'方法是使用加载器(您可以使用兼容性库来获取HC之前的版本)或保留碎片。如果您调用setRetainInstance(),实例将按原样传递给新创建的活动(它们实际上在兼容性库的FragmentActivity中使用onRetainNonConfigurationInstance),因此它与您现在的实际效果相同。

+0

但即使我使用Object x = setRetainInstance(true),也存在我无法使用它的问题。我必须创建自己的setRetainInstance(),为什么? –

+0

@RajuGujarati什么?你看过这个方法的签名吗? –

1

使用不推荐使用的方法没有任何内在错误。如果你的AsyncTask非常关键,如果你的方向改变了,你不能取消它并重新启动它,你应该考虑使用一项服务。