Android_多窗口

分屏

app默认允许分屏
禁用分屏:

  1. 在AndroidManifest的Application节点添加属性
android:resizeableActivity="false"
  1. activity节点的screenOrientation也会禁用,该属性值太多没有一一测试,可以肯定的是常用的portrait和landscape会把分屏禁用
android:screenOrientation="portrait"

在进入分屏和退出分屏模式,activity默认会重启
禁止activity重启:

  1. 有人说是activity的configChanges属性值设为“screenLayout|orientation”,但是该方法我测试没有效果
  2. 实测有效的是将值设为:“screenSize|smallestScreenSize|screenLayout|orientation”
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

判断是否是分屏:isInMultiWindowMode(),true为分屏模式

进入和退出分屏回调函数:onMultiWindowModeChanged(boolean isInMultiWindowMode)

下面给出分屏的生命周期:
在未禁用分屏时

  1. 切换至多任务页面:onPause----》onSaveInstanceState—》onStop
  2. 进入分屏:onDestroy----》onCreate—》onStart–》onRestoreInstanceState----》onResume—》onPause----》onMultiWindowModeChanged----》onResume
  3. 来回操作自测app和其他app:onPause ----》onResume 无限循环
  4. 退出分屏:onPause—》onSaveInstanceState—》onStop–》onDestroy–》onCreate–》onStart—》onRestoreInstanceState----》onResume—》onConfigurationChanged–》onMultiWindowModeChanged—》onPause–》onSaveInstanceState–》onStop

禁用分屏后:(前面都一样)

  1. 进入分屏:onConfigurationChanged–》onStart–》onMultiWindowModeChanged–》onResume
  2. 退出分屏:onConfigurationChanged–》onConfigurationChanged—》onMultiWindowModeChanged

补充说明:在测试的时候发现小米手机分屏和其他手机分屏实现不一样

  1. 进入分屏后,来回操作上面两个app,自测的app会不断的调用onPause和onResume方法,但是小米不会
  2. 在分屏之间写代码没有严格区分onStart、onResume方法和onPause、onstop方法,但是如果应用需要支持分屏就要注意了,多数手机分屏模式操作上下两个app是onPause和onResume之间来回调用的,所以例如视频暂停等问题应该把暂停放stop里面(小米应该无所谓)
  3. 分屏后的app占用屏幕的宽高是可调节的,所以横竖屏是非绝对。如果通过screenOrientation来强制横屏或者竖屏,这样会把分屏也禁掉,所以如果你的哪个页面需要强制横屏(竖屏)展示,可以通过在代码中控制,在onCreate中添加,或者在BaseActivity中添加:

强制横屏:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

强制竖屏:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

你可能感兴趣的:(Android_杂篇)