问题:pad平放在桌子上,无任何操作,activity会反复进入onDestroy onCreate方法
加了此属性android:configChanges="keyboardHidden|orientation",好了,可是我并没有进行横竖屏切换
activity中注册了180度重力感应的代码new MySensorEventListener(this).register(); 可是也没有进行180度的切换
所以问题是好了,但问题的确切出处还不清楚
1,MySensorEventListener 180度重力感应类
package cn.zhl.util; import android.app.Activity; import android.content.pm.ActivityInfo; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; public class MySensorEventListener { Activity activity; public MySensorEventListener(Activity activity) { this.activity = activity; } public void register() { // 重力感应侦听器 SensorEventListener lsn = new SensorEventListener() { public void onAccuracyChanged(Sensor s, int accuracy) { } @Override public void onSensorChanged(SensorEvent e) { // TODO Auto-generated method stub float x, y, z; x = e.values[SensorManager.DATA_X]; y = e.values[SensorManager.DATA_Y]; z = e.values[SensorManager.DATA_Z]; TurnScreen(x, y, z); } }; SensorManager sensorMgr = (SensorManager) activity .getSystemService(activity.SENSOR_SERVICE); Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); // 注册重力感应侦听器,第三个参数是检测的精确度 sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_UI); } /** * 根据重力感应侦测信号,屏幕180度翻转 * * @param x * x轴值,-10~10 * @param y * y轴值,-10~10 * @param z * z轴值,-10~10 */ private void TurnScreen(float x, float y, float z) { // 横屏正方向 if (activity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && y < -5) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } // 横屏反方向 else if (activity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE && y > 5) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } // 纵屏正方向 else if (activity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT && x > 5) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); } // 纵屏反方向 else if (activity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT && x < -5) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } }
一般在AndroidManifest.xml文件中都没有使用到android:configChanges="keyboardHidden|orientation"配置,当然还是很有用的哈
就是如果配置了这个属性,当我们横竖屏切换的时候会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法,那当然如果不配置这个属性的话就会重新调用onCreate方法了,下面是测试
package com.test; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import android.widget.EditText; import android.widget.TextView; public class TestActivity extends Activity { EditText et; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et = (EditText) findViewById(R.id.et); tv = (TextView) findViewById(R.id.tv); System.out.println("我是onCreate方法"); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){ tv.setText("横屏"); }else{ tv.setText("竖屏"); } } }