我有关于旋转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
我的问题是:
Ted*_*opp 28
这是模拟器中的已知问题(请参阅此处的讨论).这不是一个错误,但对于许多人来说,这是一个问题.据我了解,基本问题是,当您的活动进入纵向模式时,它会重新启动两次,因为模拟器分别处理两个配置更改:方向更改本身和键盘取消激活.它不会发生在另一个方向,因为没有与键盘激活相对应的配置更改事件.(我发现这很奇怪,但显然这是出于某种原因所希望的行为.)
无论如何,解决方案似乎是将此添加到您的活动清单声明中:
android:configChanges="keyboardHidden|orientation"
如果您确实需要这些更改来加载新资源,则可以在onConfigurationChanged中手动处理它.
Aak*_*ash 10
每当更改屏幕方向时,将销毁该活动并按onCreate()方法启动新活动.因此,每次旋转屏幕时,活动都将被销毁,并且新的活动将按onCreate()方法启动.您可以通过重写onSaveInstanceState(Bundle b)方法保存非静态成员.每当旋转屏幕时,Android都会调用此方法,并且会传递给定的包b oncreate(Bundle b),您可以从中提取非static成员.
| 归档时间: | 
 | 
| 查看次数: | 17049 次 | 
| 最近记录: |