Activity横竖屏切换时生命周期变化

关于Android切换横竖屏调用生命周期,我在网上搜索一下,基本上都是一个统一的说法,分为以下三种情形。

1.        默认状态下:

切换横屏时会调用一次生命周期,切换竖屏时会调用两次生命周期,其中不会调用onConfigurationChanged()方法。

2.        设置android:configChanges=“orientation”时:

切换横竖屏均会调用一次生命周期,其中在切换竖屏时会调用onConfigurationChanged()方法。

3.        设置android:configChanges="orientation|keyboardHidden"

切换横竖屏均不会调用生命周期,但是都会调用onConfigurationChanged()方法。

 

然而,我在测试时发现并非如此,经过测试可分为以下情形。

1.        设置android:configChanges="orientation|keyboardHidden|screenSize"时:

换横竖屏均不会调用生命周期,但是只有在切竖屏的时候会调用onConfigurationChanged()方法。

运行结果为:

11-03 16:50:00.160 19375-19375/com.example.simple2 I/Message1: 竖屏------------onConfigurationChanged
11-03 16:50:02.233 19375-19375/com.example.simple2 I/Message1: 竖屏------------onConfigurationChanged
11-03 16:50:06.291 19375-19375/com.example.simple2 I/Message1: 竖屏------------onConfigurationChanged
11-03 16:50:07.947 19375-19375/com.example.simple2 I/Message1: 竖屏------------onConfigurationChanged
11-03 16:50:09.457 19375-19375/com.example.simple2 I/Message1: 竖屏------------onConfigurationChanged


2.        默认设置、设置android:configChanges=“orientation”android:configChanges= "orientation|keyboardHidden"时:

切换横竖屏均会调用一次生命周期,其中在切换竖屏时不会调用onConfigurationChanged() 方法。

运行结果为:

 切横屏

11-03 16:48:01.148 17941-17941/com.example.simple2 I/Message1: 竖屏------------onPause
11-03 16:48:01.149 17941-17941/com.example.simple2 I/Message1: 竖屏------------onStop
11-03 16:48:01.149 17941-17941/com.example.simple2 I/Message1: 竖屏------------onDestroy
11-03 16:48:01.221 17941-17941/com.example.simple2 I/Message1: 横屏------------onStart
11-03 16:48:01.246 17941-17941/com.example.simple2 I/Message1: 横屏------------onResume
切竖屏
11-03 16:48:54.490 17941-17941/com.example.simple2 I/Message1: 横屏------------onPause
11-03 16:48:54.491 17941-17941/com.example.simple2 I/Message1: 横屏------------onStop
11-03 16:48:54.491 17941-17941/com.example.simple2 I/Message1: 横屏------------onDestroy
11-03 16:48:54.549 17941-17941/com.example.simple2 I/Message1: 竖屏------------onStart
11-03 16:48:54.559 17941-17941/com.example.simple2 I/Message1: 竖屏------------onResume

测试代码如下:

 

public class FullActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_full);
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        log("onRestart");
    }

    @Override
    protected void onStart() {
        super.onStart();
        log("onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        log("onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        log("onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        log("onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        log("onDestroy");
    }

    private String state;

    private void log(String str) {
        if (state == null) {
            Configuration mConfiguration = this.getResources()
                    .getConfiguration(); // 获取设置的配置信息
            int ori = mConfiguration.orientation; // 获取屏幕方向
            if (ori == mConfiguration.ORIENTATION_LANDSCAPE) {
                state = "横屏";
            } else if (ori == mConfiguration.ORIENTATION_PORTRAIT) {
                state = "竖屏";
            }
        }
        Log.i("Message1", state+"------------" + str);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        log("onConfigurationChanged");
    }
}
为了确保正确性,特此在API 19、API 8上运行均为此,在Android Studio、Eclipse上编译也均为此,如果哪位读者能够找出真正的原因还望给予指教。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值