gpt4 book ai didi

android - onCreate(...) 在设备旋转后被调用两次

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:22 33 4
gpt4 key购买 nike

我有一个关于旋转 Android 设备的问题。我的代码在 onCreate(...) 中记录了静态和非静态属性。

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
static int sn;
int n;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

sn++;
n++;

Log.i("onCreate", String.format("sn=%d n=%d", sn, n));
}
}

屏幕方向为纵向。当我第一次运行代码时,我得到:

onCreate(): sn=1 n=1

将屏幕旋转为横向后,我得到:

onCreate(): sn=2 n=1

再次将屏幕旋转为纵向后,我得到:

onCreate(): sn=3 n=1
onCreate(): sn=4 n=1

我的问题是:

  1. 如何防止在设备旋转回纵向时调用 onCreate(...) 两次?
  2. 如何在设备旋转时保存非静态变量的值?

最佳答案

这是模拟器中的一个已知问题(参见讨论 here)。这不是一个错误,但它是很多人回到几年前的问题。据我了解,基本问题是您的 Activity 在进入纵向模式时会重新启动两次,因为模拟器正在分别处理两个配置更改:方向更改本身和键盘停用。它不会在另一个方向发生,因为没有与键盘激活对应的配置更改事件。 (我觉得这很奇怪,但出于某种原因显然这是期望的行为。)

无论如何,解决方案似乎是将其添加到您的 Activity list 声明中:

android:configChanges="keyboardHidden|orientation"

如果您确实需要这些更改来加载新资源,您可以在 onConfigurationChanged 中手动处理它。

关于android - onCreate(...) 在设备旋转后被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032475/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com