“ 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()中调用方法killTaskAndFinish()时发生的。
但是为什么只在Kitkat(仿真器)上发生此循环?测试棒棒糖它不会发生
答案 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();
}