gpt4 book ai didi

android - 改变方向的工作流程

转载 作者:行者123 更新时间:2023-12-03 13:12:40 25 4
gpt4 key购买 nike

如果我有一个长时间运行的Task(例如AsyncTask,甚至是一个通过使用MainLooper和处理程序将结果发布回主线程的Thread)
是否有可能在未完全完成方向更改(从横向到纵向,反之亦然)时执行正在运行的任务结果(在主线程上执行)?

例如,以下情况是可能的:

  • 我开始 Activity
  • 长时间运行的任务将启动
  • 我将 Activity 从肖像改为风景
  • 旧 Activity 将被破坏
  • 长时间运行的任务结果将被执行(例如AsyncTask.onPostExecute();)
  • 新 Activity 将在横向实例化(由方向更改引起)

  • 所以我的问题是:

    我可以认为这是理所当然的,方向更改将在主线程上执行肖像 Activity 的破坏和景观 Activity 的重新创建,而无需在它们之间执行onPostExecute()吗?

    工作流程是否总是这样:
  • 我开始 Activity
  • 长时间运行的任务将启动
  • 我将 Activity 从肖像改为风景
  • 旧的(肖像) Activity 将被破坏
  • 新 Activity 将在横向实例化(由方向变化引起)
  • 长时间运行的任务结果将被执行(例如AsyncTask.onPostExecute();)

  • 或像这样
  • 我开始 Activity
  • 长时间运行的任务将启动
  • 长时间运行的任务结果将被执行(例如AsyncTask.onPostExecute();)
  • 我将 Activity 从肖像改为风景
  • 旧的(肖像) Activity 将被破坏
  • 新 Activity 将在横向实例化(由方向变化引起)

  • 但从来没有像这样:
  • 旧的(肖像) Activity 将被破坏
  • 长时间运行的任务结果将被执行(例如AsyncTask.onPostExecute();)
  • 新 Activity 将在横向实例化(由方向变化引起)

  • 我问是因为我不确定是否要在MainLooper上一次运行来破坏和重新创建 Activity ...很难对其进行测试,因为它的时间很难重现。因此,在这一点上,专家知识将是很棒的……它也可以使用Fragment(即,使用setRetainInstanceState)而不是Activity来实现

    最佳答案

    如果您使用Fragment#setRetainInstanceState(boolean),那么即使在Activity重新创建之后,也可以允许片段使AsyncTask保持 Activity 状态。这被认为是最好的方法,最后的选择是在 list 文件中设置configChanges="orientation|screenSize"

    关于android - 改变方向的工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746967/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com