Android N中最大、最引人注意的变化就是Mutil-window模式。对于一个开发者,咱们最关心的就是:Mutil-window模式下怎么配置mutil-window模式、Activity的生命周期的变化、提供了什么API。android
首先先将设置编译时的sdk和工具版本。具体见下图.
api
接下来就是对 Activity 的配置了,你能够在 AndroidManifest 中设置activity是否在 mutil-window 模式下显示,以及显示的样式(大小和布局)。同一个task中的全部activity的样式取决栈底的activity的样式。
决定是否在 mutil-window 下显示的代码很简单、只要在
<application android:resizeableActivity="true"> <activity android:name=".MainActivity"> <layout android:defaultHeight="500dp" android:defaultWidth="300dp" android:gravity="top|end" android:minimalSize="200dp" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
实际操做过程当中,发如今 Mutil-window模式下设置 在
注意:若是使用低于Android N的sdk编译的app,而且他没有限定orientation,在mutil-window模式下,他会自动拉伸兼容,不须要额外地配置字段。可是会有可能不兼容的警告。可是若是是一个限定了orientation为 portrait 或 landscape的app,Android N不会拉伸它,它会直接占满整个屏幕.函数
Multi-window生命周期不会改变Activity生命周期。在Multi-window的模式下,只有用户最近使用的那个Activity会处于激活状态。这个Activity会被认为是最顶层的,其余的activity都会处于pause状态,即便他们是可见的。然而,Android系统会给这些pause可是可见的activity更高的优先级。若是用户跟某个pause的Activity交互,那么Activity就会resumed,前一个顶层的Activity会被pause。工具
注意:在 multi-windo 模式,一个App能够处于pause状态可是依然对用户可见。一个App可能须要运行他的activity即便它处于pause状态.好比,一个视屏播放软件,他已经处于暂停状态,可是依然对用户可见须要继续播放他的视频。所以,咱们建议Activity不要在onPause()的时候暂停视频播放,而应该在onStop()中,在onStart()中恢复播放。布局
当用户将一个App置于 mutil-window 模式,系统将会通知 Activity 配置变动,做为运行时的变动。特别是这个改变就像系统切换竖屏和横屏同样。对于处理运行时的配置变化,你的 Activity 能够在对应的配置变动回调(好比 onMultiWindowChanged() 中处理,或者让系统自动处理它的销毁和从新建立。google
接下来咱们在具体的 Activity 生命周期回调函数中输出log,看看 mutil-window 模式下生命周期code
从全屏到 mutil-window 模式视频
mutil-window 模式到全屏模式
这里能够看见当从mutil-window模式到全屏模式的时候,onMultiWindowChanged()函数就被调用了。咱们能够在这里处理跟显示模式切换有关的东西。
这些新的API可让接收到 Mutil-window 状态改变的通知,以及判断是否处于 Mutil-window 模式。
Activity.inMultiWindow()
是否处于 multi-window 模式。
Activity.inPictureInPicture()
是否处于画中画模式.
注意: 画中画模式是 Mutil-window 模式的特例. 若是 myActivity.inPictureInPicture() 返回 true, 那么myActivity.inMultiWindow() 也会返回 true.
Activity.onPictureInPictureChanged(boolean inPictureInPicture)
系统会在activity进入或者退出 画中画 模式回调这个方法。它会传递一个值指示activity是否进入画中画模式,true 表明正在进入画中画模式,false 表明正在退出。
Fragment也有对应的方法,好比说Fragment.inMultiWindow()