Activity横竖屏切换之生命周期在Android开发中,我们经常涉及到横竖屏的切换。那么,在横竖屏切换的过程中,Activity的生命周期有没有发生变化呢?下面我们通过一个Demo来探究横竖屏切换和Activity之间的关系。1.新建工程【File】【new】【AndroidApplicationProject】命名为:08_97皇拳2.编写布局根据需求编写布局文件,效果如图1-1所示:图1-1所示图1-1中,当点击按钮“重拳”时,boss所对应的生命值就会减去6。当boss的生命值小于0时,则代表胜利。对应的xml布局代码如例1-1:例1-1RelativeLayoutxmlns:android=:tools=:layout_width=match_parentandroid:layout_height=match_parenttools:context=.MainActivityTextViewandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=boss剩余的生命值:/TextViewandroid:layout_marginTop=30dipandroid:id=@+id/tv_bloodandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=100/Buttonandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_centerHorizontal=trueandroid:layout_centerVertical=trueandroid:onClick=clickandroid:text=重拳//RelativeLayout3.查找控件在Activity中查找相关的控件,代码如下例1-2:例1-2@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);System.out.println(oncreate);tv_blood=(TextView)findViewById(R.id.tv_blood);System.out.println(97拳皇任务栈id:+getTaskId());}4.添加点击事件当点击按钮时,处理相关的业务操作即boss的生命值减去6。代码如例1-3:例1-3publicvoidclick(Viewview){blood-=6;if(blood0){tv_blood.setText(K.O.美女转两圈);return;}tv_blood.setText(blood+);}5.提出问题我们已经编写了点击事件的处理,并更新了TextView的数据。运行程序,效果如图1-2所示:图1-2所示点击按钮,此时TestView数字会减去6,效果如图1-3所示:图1-3所示若此时,按住“ctrl+F11“使手机屏幕变成横屏,效果如图1-4所示:图1-4所示对比图1-3和图1-4可知:TextView显示的数据从94又变成100。由于切屏,数据就发生了变化,这在项目中是不允许的。我们在Activity中重写该Activity的Ondesory()方法,切屏时logcat输出信息如图1-5所示:图1-5所示从图1-5可知:在切屏时,该Activity会销毁,然后再重新创建,这也是为什么TextView会显示为100的原因。那么,如何操作才能使在切屏之后数据显示保持原来而不变呢?即切屏前数据是94,那么在切屏之后数据仍然是94?6.解决办法若在工程中指定屏幕的方向,即要么为横屏要么为竖屏,那么就不会出现上述问题。如何写死屏幕的方向?我们可以在清单文件中做如下操作,代码如例1-4:例1-4activityandroid:screenOrientation=portraitandroid:name=com.itheima.kof97.MainActivityandroid:label=@string/app_name………/activity例1-4可知:在该清单文件中指定了屏幕的方向,即为“portrait”竖直方向。同理,我们也可以写死为横屏,即android:screenOrientation=landscape。若不指定该属性的值,默认情况下该值为“sensor”即根据传感器来自动设置屏幕的方向。若能设置系统的环境,使其不再敏感横竖屏的切换。如何操作?我们也可以在清单文件加以配置信息,代码如例1-5:例1-5activityandroid:configChanges=orientation|screenSize|keyboardHiddenandroid:name=com.itheima.kof97.MainActivityandroid:label=@string/app_name………/activity运行程序,效果如图1-6所示:Ctrl+F11图1-6所示图1-6可知:此时在切屏的过程中,数据没有发生变化,切屏之后的数据和切屏之前的数据保持一致。此时,logcat打印消息如图1-7所示:图1-7所示对比图1-5和图1-7可知:在配置了清单文件之后,切屏过程中不会再调用该Activity的onDestroy方法啦。