如何在消息队列中处理方向更改?

时间:2016-10-04 11:59:28

标签: android

是原子操作吗?

我的意思是在方向更改期间是否有可能在主线程上执行其他任何操作?

例如,假设主线程上的流程是这样的:

someOperation - > orientationChangeStart - > someOtherOperation - >的 orientationChangeEnd

这可能吗?

当方向更改正在进行时,可以在UI线程上执行someOtherOperation吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

是的,这是原子操作。

在伪看起来像:

void setNewOrientation(int state) {
    currentState = state;
    runOrientationChangedEvent();
}

然后通常会重新创建Activity。只有重新创建Activity会添加到消息队列中,因此可以查看是否足够快地更改设备方向。

你不能得到这个过程的开始和结束,因为它只是改变了几个int变量,可以告诉你当前的方向,如方向

getActivity().getResources().getConfiguration().orientation

轮换

getWindowManager().getDefaultDisplay().getRotation();

因此,只有在方向更改后才能获得活动。

答案 1 :(得分:2)

可能您无法衡量 orientationChangeStart orientationChangeEnd 之间的时间,但您可以执行 someOtherOperation 处理 onConfigurationChanged 事件。 例: How to use onConfigurationChanged() and newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE in android 2.3.3