处理方向更改时出现问题

nix*_*xau 5 android screen-orientation android-emulator android-2.2-froyo

我需要在Android应用程序中处理方向更改.为此我决定使用OrientationEventListener便利课.但他的回调方法给出了一些奇怪的行为.

我的应用程序以纵向模式启动,然后最终切换到lanscape.我在回调onOrientationChanged方法中执行了一些自定义代码,它提供了一些额外的UI处理逻辑 - 它有几个调用findViewById.奇怪的是,当从横向切换回纵向模式时,onOrientationChanged回调被调用两次,更糟糕的是 - 第二次调用处理错误 Context - findViewById方法开始返回null.这些调用是从MainThread进行的

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    listener = new OrientationListener();
}

    @Override
protected void onResume() {     
    super.onResume();
    // enabling listening
    listener.enable();
}
    @Override
protected void onPause() {
    super.onPause();
    // disabling listening
    listener.disable();
}
Run Code Online (Sandbox Code Playgroud)

我用一个Activity没有任何逻辑的假人复制了相同的行为,除了一个处理定向哈希的人.我通过按Ctrl + F11从Android 2.2模拟器启动方向切换 可能有什么问题?

Upd:实现的内部类 OrientationEventListener

private class OrientationListener extends OrientationEventListener {
    public OrientationL() {
        super(getBaseContext());
    }

    @Override
    public void onOrientationChanged(int orientation) {

        toString();

    }
}
Run Code Online (Sandbox Code Playgroud)

}

Jos*_*osh 5

这只是模拟器中记录的错误.真实设备不会展示此双生命周期事件行为.我不久前遇到了同样的问题,它在真实设备上消失了.

如果您只能在一个方向上测试方向更改,直到您接触到物理电话,我建议您忽略此问题.否则,您可以通过保持静态布尔值来"跳过"第二组生命周期调用,指示您已经完成了第一组.

有关详细信息,请参阅此问题报告.