Android N 多窗口模式,你需要知道的一切

Paste_Image.png

Android N中最大、最引人注意的变化就是Mutil-window模式。对于一个开发者,我们最关心的就是:Mutil-window模式下怎么配置mutil-window模式、Activity的生命周期的变化、提供了什么API。

让你的应用支持 Mutil-window 模式

  1. 首先先将设置编译时的sdk和工具版本。具体见下图.


    Paste_Image.png
  1. 接下来就是对 Activity 的配置了,你可以在 AndroidManifest 中设置activity是否在 mutil-window 模式下显示,以及显示的样式(大小和布局)。同一个task中的所有activity的样式取决栈底的activity的样式。
    决定是否在 mutil-window 下显示的代码很简单、只要在<application>或者<activity>节点下设置android:resizeableActivity属性就行了。
    <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模式下设置 在 <activity> 中设置 <layout>元素是无效的,比如 defaultHeight、defaultWidth.可能 <layout> 元素只在画中画(pictures-in-picture)模式中有效。

注意:如果使用低于Android N的sdk编译的app,并且他没有限定orientation,在mutil-window模式下,他会自动拉伸兼容,不需要额外地配置字段。但是会有可能不兼容的警告。但是如果是一个限定了orientation为 portrait 或 landscape的app,Android N不会拉伸它,它会直接占满整个屏幕.

Multi-window生命周期

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 模式

全屏到小窗口.gif
Paste_Image.png

** mutil-window 模式到全屏模式**
这里可以看见当从mutil-window模式到全屏模式的时候,onMultiWindowChanged()函数就被调用了。我们可以在这里处理跟显示模式切换有关的东西。

Paste_Image.png

新的API

这些新的API可以让接收到 Mutil-window 状态改变的通知,以及判断是否处于 Mutil-window 模式。

  1. Activity.inMultiWindow()
    是否处于 multi-window 模式。

  2. Activity.inPictureInPicture()
    是否处于画中画模式.

注意: 画中画模式是 Mutil-window 模式的特例. 如果 myActivity.inPictureInPicture() 返回 true, 那么myActivity.inMultiWindow() 也会返回 true.

  1. Activity.onMultiWindowChanged(boolean inMultiWindow)
    系统会在activity进入或者退出 mutil-window 模式回调这个方法。它会传递一个值指示activity是否进入 mutil-window 模式,true 代表正在进入 mutil-window 模式,false 代表正在退出。
  2. Activity.onPictureInPictureChanged(boolean inPictureInPicture)
    系统会在activity进入或者退出 画中画 模式回调这个方法。它会传递一个值指示activity是否进入画中画模式,true 代表正在进入画中画模式,false 代表正在退出。

Fragment也有对应的方法,比如说Fragment.inMultiWindow()

感想

  1. 我觉得这是Android N绝对杀手级的feature,想想能边看电影边微信就觉得很满足。
  2. Android 平板之前一直被诟病没有多少适合的App,这下可好了,直接分屏使用,爽爆炸。特别Google对Pixel C还有25%的优惠
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,900评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,417评论 2 45
  • 多窗口功能介绍 概述 Android 从 Android N(7.0)版本开始引入了多窗口的功能。 关于Andro...
    i_cassell阅读 7,223评论 0 9
  • 我们读了十二章善用时间后,首先知道怎样的事情要建立一个项目,比如那些一个动作完成不了的事情,它受时间及空间...
    一枚沉香阅读 755评论 0 0
  • 现在有一种记事本叫手帐,实际上是小时候的粘贴本和日记的结合体。我试着玩过。 手帐很好玩。及时,多样,...
    书书虫阅读 619评论 5 4