在Android中避免使用Asynctask重新加载活动以处理方向更改

19

在Android中,当用户改变方向时,如何避免使用AsyncTask类重新加载活动?有人能给一个例子吗?

2个回答

79
请尽可能简洁地翻译以下内容,涉及 IT 技术:

请将配置更改作为最后的手段。当发生这种情况时,您的应用程序必须正常工作。如果您因为方向配置更改而关闭它,那么您的应用程序仍将以其他方式崩溃,有时会更加微妙。允许由于方向配置更改重启活动是一种非常好的方法,可以轻松测试您的应用程序中的重要代码路径,否则这些代码路径很少被使用但在用户手中仍然会导致故障。

为了在 Activity 实例之间传输活动对象,请使用新的 fragment 静态库,它允许您创建一个在实例之间保留的片段。


3
请问您能提供更多关于“fragment that is retained for you across instances”的解释吗?我会将其翻译成更通俗易懂的语言,但不会改变原意。 - fhucho
3
抱歉,该链接无法访问。请提供正确的链接或描述要翻译的内容。 - hackbod
8
@hackbod:FYI,对于Android JavaDocs中的方法链接,我使用URL缩短器(具体来说是Chrome扩展程序提供的goo.gl)。 - CommonsWare
3
我意识到我来晚了,但是使用VideoView的Activity/Fragment似乎是关闭配置更改的好候选。我尝试过setRetainsInstance(),但是似乎无法避免重新创建/缓冲VideoView。参见:https://dev59.com/onTYa4cB1Zd3GeqPri2u。我有什么疏忽吗? - mikejonesguy

3
Chirag已经正确指出了解决方案。
我只想补充一点,Activity的重启与其中的AsyncTask没有任何关系。默认情况下,当有任何配置更改时,Activity会被重新启动,除非该配置更改由Activity显式处理。这是通过在清单文件中进行条目设置来完成的。
请参阅开发者指南中的此链接:android:configChanges 注意:请在设备上而不是模拟器上检查代码。因为我之前遇到过类似的问题。相同的代码在模拟器上无法工作,但在设备上完美运行。因此,请在清单中添加android:configChanges的条目,并在Android设备上检查应用程序。
我赞同@hackbod的观点。只有在必要时才这样做!

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