paste_image.png
android n中最大、最引人注意的变化就是mutil-window模式。对于一个开发者,我们最关心的就是:mutil-window模式下怎么配置mutil-window模式、activity的生命周期的变化、提供了什么api。
首先先将设置编译时的sdk和工具版本。具体见下图.
接下来就是对 activity 的配置了,你可以在 androidmanifest 中设置activity是否在 mutil-window 模式下显示,以及显示的样式(大小和布局)。同一个task中的所有activity的样式取决栈底的activity的样式。
决定是否在 mutil-window 下显示的代码很简单、只要在或者节点下设置android:resizeableactivity属性就行了。
实际操作过程中,发现在 mutil-window模式下设置 在 中设置 元素是无效的,比如 defaultheight、defaultwidth.可能 元素只在画中画(pictures-in-picture)模式中有效。
注意:如果使用低于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() 中处理,或者让系统自动处理它的销毁和重新创建。
接下来我们在具体的 activity 生命周期回调函数中输出log,看看 mutil-window 模式下生命周期
从全屏到 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.onmultiwindowchanged(boolean inmultiwindow)
系统会在activity进入或者退出 mutil-window 模式回调这个方法。它会传递一个值指示activity是否进入 mutil-window 模式,true 代表正在进入 mutil-window 模式,false 代表正在退出。
activity.onpictureinpicturechanged(boolean inpictureinpicture)
系统会在activity进入或者退出 画中画 模式回调这个方法。它会传递一个值指示activity是否进入画中画模式,true 代表正在进入画中画模式,false 代表正在退出。
fragment也有对应的方法,比如说fragment.inmultiwindow()
我觉得这是android n绝对杀手级的feature,想想能边看电影边微信就觉得很满足。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载:http://www.cnblogs.com/kissazi2/p/5271131.html