Activity横竖屏切换的生命周期

这已经属于一个老生常谈的问题了,在这里记录的原因是因为由于sdk版本的不断更新,导致Activity横竖屏切换时生命周期的执行发生了变化,以至于在网上看到了多个版本和结论。于是乎忍不住找了台真机试了一下,这里简单记录下结果和当前版本的结论。

分析上的东西可以看这两篇文章:

http://www.jianshu.com/p/f62aed417809

http://www.cnblogs.com/xiaoQLu/p/3324503.html

这里就直接上代码了

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("tag", "onCreate");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("tag", "onStart");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d("tag", "onResume");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.d("tag", "onPause");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.d("tag", "onStop");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("tag", "onDestroy");
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("tag", "onSaveInstanceState");
    }
    @Override
    protected void onRestoreInstanceState(Bundle outState) {
        super.onRestoreInstanceState(outState);
        Log.d("tag", "onRestoreInstanceState");
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
        Log.d("tag", "onConfigurationChanged");
    }
}

===================================

测试机型:HUAWEI MT7-CL00

系统版本:4.4.2

app编译版本:6.0

===================================

结果:

正常情况下:

竖屏切横屏:

04-01 10:53:23.715 23032-23032/…… D/tag: onPause
04-01 10:53:23.750 23032-23032/…… D/tag: onSaveInstanceState
04-01 10:53:23.750 23032-23032/…… D/tag: onStop
04-01 10:53:23.750 23032-23032/…… D/tag: onDestroy
04-01 10:53:23.795 23032-23032/…… D/tag: onCreate
04-01 10:53:23.795 23032-23032/…… D/tag: onStart
04-01 10:53:23.795 23032-23032/…… D/tag: onRestoreInstanceState
04-01 10:53:23.795 23032-23032/…… D/tag: onResume

横屏竖屏:

04-01 10:56:14.450 23032-23032/…… D/tag: onPause
04-01 10:56:14.485 23032-23032/…… D/tag: onSaveInstanceState
04-01 10:56:14.485 23032-23032/…… D/tag: onStop
04-01 10:56:14.485 23032-23032/…… D/tag: onDestroy
04-01 10:56:14.520 23032-23032/…… D/tag: onCreate
04-01 10:56:14.520 23032-23032/…… D/tag: onStart
04-01 10:56:14.520 23032-23032/…… D/tag: onRestoreInstanceState
04-01 10:56:14.520 23032-23032/…… D/tag: onResume


在manifest中当前activity配置了configChange参数后,android:configChanges="orientation|screenSize"

竖屏切横屏

04-01 11:07:36.205 9376-9376/…… D/tag: onConfigurationChanged
横屏竖屏

04-01 11:07:36.205 9376-9376/…… D/tag: onConfigurationChanged

结论:

1、不论横切竖还是竖切横,正常情况下切换时的生命周期是一样的,各方法均执行一次。

      分析来看的话分为两步:

             (1)Activity销毁: onPause() ---> onStop() ---> onDestroy()
             (2)Activity的重新创建 :onCreate() ---> onStart() --->onResume()

2、配置添加android:configChanges="orientation|screenSize"后切屏均不再重建Activity。

        特别的是,在res文件中添加了layout-land文件夹和横屏布局。在配置了configChanges参数情况下切屏只能显示第一次创建activity时候创建的布局(手机横过来的时候打开app(创建activity)会创建横屏布局),另一个布局是不会显示的,只会把竖(横)屏的布局直接横(竖)过来……

3、当onSaveInstanceState放法被调用时,执行的顺序,官方文档里是这么描述的:

onSaveInstanceState

If called, this method will occur before onStop(). There are no guarantees about whether it will occur before or after onPause().



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值