如果我有一个长时间运行的任务(如AsyncTask,或者甚至是一个使用MainLooper和处理程序将结果发回主线程的线程) 是否有可能在方向改变(从横向到纵向或反之亦然)未完全完成时执行正在运行的任务结果(在主线程上执行)?
例如,以下情况是否可能:
所以我的问题是:
我可以理所当然地认为,方向更改将在主线程上执行纵向活动和重新创建横向活动,而不在它们之间执行onPostExecute()吗?
工作流程是否总是这样:
或者像这样
但绝不喜欢这样:
我问,因为我不确定活动的破坏和重新创建是否会在MainLooper的单次运行中执行...很难测试它,因为它的时间很难重现。因此,专家知识在这一点上会很棒......它也可以用Fragment(即使用setRetainInstanceState)而不是Activity来实现
答案 0 :(得分:0)
如果使用Fragment#setRetainInstanceState(boolean)
,那么即使在Activity重新创建之后,您也可以允许片段使AsyncTask保持活动状态。这被认为是执行此操作的最佳方式,最后的选择是在清单文件中设置configChanges="orientation|screenSize"
。