android-----横竖屏切换对Activity生命周期的影响

前面我们分析过[Activity](https://www.baidu.com/s?wd=Activity&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd)的生命周期(见:[android-----Activity生命周期](http://blog.csdn.net/hzw19920329/article/details/51289644)),但是在现实应用中我们可能会对手机进行横竖屏切换,那么这样的切换对Activity的生命周期有什么影响呢?

   先来看看实例:
public class Activity1 extends Activity{    public Button mButton;  @Override   protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);     setContentView(R.layout.activity_lifecycle);        System.out.println("Activity1----->onCreate");  }   @Override   protected void onDestroy() {        super.onDestroy();      System.out.println("Activity1----->onDestroy"); }   @Override   protected void onPause() {      super.onPause();        System.out.println("Activity1----->onPause");   }   @Override   protected void onRestart() {        super.onRestart();      System.out.println("Activity1----->onRestart"); }   @Override   protected void onResume() {     super.onResume();       System.out.println("Activity1----->onResume");  }   @Override   protected void onStart() {      super.onStart();        System.out.println("Activity1----->onStart");   }   @Override   protected void onStop() {       super.onStop();     System.out.println("Activity1----->onStop");    }       @Override   protected void onRestoreInstanceState(Bundle savedInstanceState) {      super.onRestoreInstanceState(savedInstanceState);       System.out.println("Activity1----->onRestoreInstanceState");    }       @Override   protected void onSaveInstanceState(Bundle outState) {       super.onSaveInstanceState(outState);        System.out.println("Activity1----->onSaveInstanceState");   }       @Override   public void onConfigurationChanged(Configuration newConfig) {       super.onConfigurationChanged(newConfig);        if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)     {           System.out.println("现在是横屏转竖屏");     }else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)      {           System.out.println("现在是竖屏转横屏");     }   }}
   横竖屏切换涉及到的是Activity的android:configChanges属性,而与其android:launchMode属性没有关系;

   android:configChanges可以设置的属性值有:

   (1)orientation:消除横竖屏的影响

   (2)keyboardHidden:消除键盘的影响

(3)screenSize:消除屏幕大小的影响

   当我们设置Activity的android:configChanges属性为orientation或者orientation|keyboardHidden或者不设置这个属性的时候,Logcat输出如下:

   刚刚启动Activity的时候:

   Activity1----->onCreate
   Activity1----->onStart
   Activity1----->onResume

   模拟器中按下Ctrl+F11或者Ctrl+F12由竖屏切换到横屏:

   Activity1----->onPause
   Activity1----->onSaveInstanceState
   Activity1----->onStop
   Activity1----->onDestroy
   Activity1----->onCreate
   Activity1----->onStart
   Activity1----->onRestoreInstanceState
   Activity1----->onResume

   模拟器中按下Ctrl+F11或者Ctrl+F12由横屏切换到竖屏:

   Activity1----->onPause
   Activity1----->onSaveInstanceState
   Activity1----->onStop
   Activity1----->onDestroy
   Activity1----->onCreate
   Activity1----->onStart
   Activity1----->onRestoreInstanceState
   Activity1----->onResume

   当我们设置Activity的android:configChanges属性为orientation|screenSize或者orientation|screenSize|keyboardHidden,Logcat输出如下:

   刚刚启动Activity的时候:

   Activity1----->onCreate
   Activity1----->onStart
   Activity1----->onResume
   模拟器中按下Ctrl+F11或者Ctrl+F12由竖屏切换到横屏:
   现在是竖屏转横屏

   模拟器中按下Ctrl+F11或者Ctrl+F12由横屏切换到竖屏:

   现在是横屏转竖屏

   可以发现在设置了orientation|screenSize属性之后,在进行横竖屏切换的时候调用的方法是onConfigurationChanged,而不会重新加载Activity的各个生命周期;

   还有一点需要注意的是在进行横竖屏切换的时候在调用onStop之前会调用onSaveInstanceState来进行Activity的状态保存,随后在重新显示该Activity的onResume方法之前会调用onRestoreInstanceState来恢复之前由onSaveInstanceState保存的Activity信息;

   当然在显示中我们可以屏蔽掉横竖屏的切换操作,这样就不会出现切换的过程中Activity生命周期重新加载的情况了,具体做法是,在Activity中加入如下语句:

  android:screenOrientation="portrait" 始终以竖屏显示 
   android:screenOrientation="landscape" 始终以横屏显示

   如果不想设置整个软件屏蔽横竖屏切换,只想设置屏蔽某个Activity的横竖屏切换功能的话,只需要下面操作:

Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);以竖屏显示

Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);以横屏显示

</article>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容