在Android系统默认的情况下,当“屏幕方向”或“键盘显示隐藏”变化时都会销毁当前Activity,创建新的Activity。如果不希望重新创建Activity实例,可以在AndroidManifest.xml中配置

android:configChanges="keyboardHidden|orientation" >

这样就不会销毁重建了,在配置了这个属性后,android:configChanges 属性就会捕获“屏幕方向”和“键盘显示隐藏”变化,当捕获到这些变化后会调用Activity的onConfigurationChanged()方法。
然而上面的配置只在android4.0之前的版本起作用,在android 4.0 以上不起作用,必须要加上screenSize,也就是说android 4.0以后的版本必须这样配置

android:configChanges="keyboardHidden|orientation|screenSize"

下面我们结合实例说orientation和onConfigurationChanaged方法

代码:

public class MainActivity extends AppCompatActivity {    private static final String TAG = "owen";    //Activity创建时调用    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.i(TAG,"执行了onCreate方法");    }    //Activity创建或者从后台重新回到前台时被调用    @Override    protected void onStart() {        super.onStart();        Log.i(TAG,"执行了onStart方法");    }    //Activity从后台重新回到前台时被调用    @Override    protected void onRestart() {        super.onRestart();        Log.i(TAG,"执行了onRestart方法");    }    //Activity创建或者从被覆盖、后台重新回到前台时被调用    @Override    protected void onResume() {        super.onResume();        Log.i(TAG,"执行了onResume方法");    }    //Activity被覆盖到下面或者锁屏时被调用    @Override    protected void onPause() {        super.onPause();        Log.i(TAG,"执行了onPause方法");    }    //退出当前Activity或者跳转到新Activity时被调用    @Override    protected void onStop() {        super.onStop();        Log.i(TAG,"执行了onStop方法");    }    //退出当前Activity时被调用,调用之后Activity就结束了    @Override    protected void onDestroy() {        super.onDestroy();        Log.i(TAG,"执行了onDestroy方法");    }    //当指定了android:configChanges="orientation"后,方向改变时onConfigurationChanged被调用,并且activity不再销毁重建    @Override    public void onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        switch (newConfig.orientation) {            case Configuration.ORIENTATION_PORTRAIT://竖屏                Log.i(TAG,"竖屏");                break;            case Configuration.ORIENTATION_LANDSCAPE://横屏                Log.i(TAG,"横屏");            default:                break;        }    }}

在没有配置android:configChanges时,进行横屏和竖屏的切换时(在手机的设置中打开”自动旋转屏幕”选项)日志如:

从上面的日志中可以看出activity执行了销毁重建的过程,onConfigurationChanaged并没有被调用
如果加上android:configChanges=”keyboardHidden|orientation|screenSize”再进行旋转日志如下:

从上面的日志中可以看出activity并没有执行销毁重建的过程,而调用了onConfigurationChanaged方法

更多相关文章

  1. android通过chmod命令实现文件权限修改
  2. Android(安卓)AIDL接口定义语言
  3. android TextView的字体颜色设置的多种方法(续)
  4. android AMS
  5. Android,采用AIDL编写接口实现IPC 入门
  6. android TextView的字体颜色设置的多种方法(续)
  7. Android(安卓)APP使用自定义字体实现方法
  8. Android的线程使用来更新UI----Thread、Handler、Looper、TimerT
  9. android TextView的字体颜色设置的多种方法(续)

随机推荐

  1. 必须会的SQL语句(五) NULL数据处理和类型
  2. 必须会的SQL语句(四) 数据删除和更新
  3. 必须会的SQL语句(三) 数据插入
  4. 必须会的SQL语句(二) 创建表、修改表结构
  5. 必须会的SQL语句(一) 创建数据库与删除数
  6. 安装sql server2008后再安装sql 2005找不
  7. SQLSERVER数据备份文件的分割备份方法
  8. sql server的 update from 语句的深究
  9. sql2000报错Successfully re-opened the
  10. SQLSERVERAGENT警告:事件 ID: 312