在API 19(KitKat)中使用setRequestedOrientation()时的无限循环活动

时间:2018-07-26 20:42:04

标签: android android-4.4-kitkat android-orientation

“ setRequestedOrientation”方法通常会在高于Kitkat的任何版本的android上正常重启活动。

但是在Kitkat中,即使使用if,活动也会继续重新开始。

v1.16.20

编辑1-StackTrace:

https://gist.github.com/sshnakamoto/11ef6179a561054e54ec4d41a03238f0

对不起,我的日志太长了,无法在此处发布。我创建了要点。但实际上,您会看到onCreate()和onStart()方法之间的循环。

编辑2-活动代码:

    int orientation = getResources().getConfiguration().orientation;

    // Doesn't work
    if (orientation != ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    // Doesn't work
    if (orientation != Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

我发现了这个错误,它是由于ResquestedOrientation()方法重新启动活动而在onStop()中调用方法killTask​​AndFinish()时发生的。

但是为什么只在Kitkat(仿真器)上发生此循环?测试棒棒糖它不会发生

1 个答案:

答案 0 :(得分:0)

我不知道为什么只在KikKat上发生,但是我能够解决删除处理程序使用的问题。在我的情况下只需要TimerTask。

这可以修复该错误并防止内存泄漏。

   @Override
    protected void onStart() {
        super.onStart();

        timerTask = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        changeColors();
                    }
                });
            }
        };

        timer = new Timer();
        timer.schedule(timerTask, 0, speed);
    }

    @Override
    protected void onStop() {
        super.onStop();

        timerTask.cancel();
        timer.cancel();
        timer.purge();
    }