【问题标题】:Avoid reloading activity with asynctask on orientation change in android避免在android中方向更改时使用异步任务重新加载活动
【发布时间】:2011-03-17 06:30:06
【问题描述】:

当用户在 android 中改变方向时,如何避免在活动中使用 asynctask 类重新加载活动?谁能举个例子?

【问题讨论】:

    标签: android android-asynctask screen-orientation


    【解决方案1】:

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

    要跨 Activity 实例传输活动对象,请使用新的片段静态库,它允许您制作跨实例为您保留的片段。

    【讨论】:

    • 您能否指出一些可以更详细地解释“跨实例为您保留的片段”的内容?
    • developer.android.com/reference/android/app/…(抱歉,链接已损坏——我不知道如何将这些类型的链接放入 StackOverflow。您需要在末尾添加一个右括号。)
    • @hackbod:仅供参考,对于 Android JavaDocs 中方法的链接,我使用 URL 缩短器(特别是 goo.gl,由 Chrome 扩展程序提供)。
    • @hackbod:我意识到我来晚了,但 VideoView 的活动/片段似乎是关闭配置更改的好选择。我已经尝试过 setRetainsInstance() 并且似乎无法避免重新创建/重新缓冲 VideoView。请参阅:stackoverflow.com/questions/17513763/…。我错过了什么吗?
    【解决方案2】:

    Chirag 已经正确指出了解决方案。

    我只想补充一点,Activity 的重启与里面的AsyncTask 无关。默认情况下,当有任何配置更改时,Activity 会重新启动,除非配置更改由 Activity 显式处理。这是通过在清单文件中创建一个条目来完成的。

    浏览此链接开发人员指南:android:configChanges

    注意:检查设备上的代码而不是模拟器。因为我之前也遇到过类似的问题。相同的代码在模拟器上不起作用,但它在设备上完美运行。因此,在清单中添加android:configChanges 的条目,并在 android 设备而不是模拟器上检查应用程序。

    我第二个@hackbod。 仅在必要时才这样做!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多