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

Paste_Image.png

Android N中最大、最引人注意的變化就是Mutil-window模式曼追。對于一個開發(fā)者窍仰,我們最關(guān)心的就是:Mutil-window模式下怎么配置mutil-window模式、Activity的生命周期的變化礼殊、提供了什么API驹吮。

讓你的應(yīng)用支持 Mutil-window 模式

  1. 首先先將設(shè)置編譯時的sdk和工具版本。具體見下圖.


    Paste_Image.png
  1. 接下來就是對 Activity 的配置了晶伦,你可以在 AndroidManifest 中設(shè)置activity是否在 mutil-window 模式下顯示碟狞,以及顯示的樣式(大小和布局)。同一個task中的所有activity的樣式取決棧底的activity的樣式婚陪。
    決定是否在 mutil-window 下顯示的代碼很簡單族沃、只要在<application>或者<activity>節(jié)點下設(shè)置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>

實際操作過程中,發(fā)現(xiàn)在 Mutil-window模式下設(shè)置 在 <activity> 中設(shè)置 <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會處于激活狀態(tài)遗契。這個Activity會被認為是最頂層的,其他的activity都會處于pause狀態(tài),即使他們是可見的病曾。然而牍蜂,Android系統(tǒng)會給這些pause但是可見的activity更高的優(yōu)先級。如果用戶跟某個pause的Activity交互泰涂,那么Activity就會resumed鲫竞,前一個頂層的Activity會被pause。

注意:在 multi-windo 模式逼蒙,一個App可以處于pause狀態(tài)但是依然對用戶可見从绘。一個App可能需要運行他的activity即使它處于pause狀態(tài).比如,一個視屏播放軟件是牢,他已經(jīng)處于暫停狀態(tài)僵井,但是依然對用戶可見需要繼續(xù)播放他的視頻。因此驳棱,我們建議Activity不要在onPause()的時候暫停視頻播放批什,而應(yīng)該在onStop()中,在onStart()中恢復(fù)播放蹈胡。

當(dāng)用戶將一個App置于 mutil-window 模式渊季,系統(tǒng)將會通知 Activity 配置變更,作為運行時的變更罚渐。特別是這個改變就像系統(tǒng)切換豎屏和橫屏一樣却汉。對于處理運行時的配置變化,你的 Activity 可以在對應(yīng)的配置變更回調(diào)(比如 onMultiWindowChanged() 中處理荷并,或者讓系統(tǒng)自動處理它的銷毀和重新創(chuàng)建合砂。

接下來我們在具體的 Activity 生命周期回調(diào)函數(shù)中輸出log,看看 mutil-window 模式下生命周期

從全屏到 mutil-window 模式

全屏到小窗口.gif
Paste_Image.png

** mutil-window 模式到全屏模式**
這里可以看見當(dāng)從mutil-window模式到全屏模式的時候源织,onMultiWindowChanged()函數(shù)就被調(diào)用了翩伪。我們可以在這里處理跟顯示模式切換有關(guān)的東西微猖。

Paste_Image.png

新的API

這些新的API可以讓接收到 Mutil-window 狀態(tài)改變的通知,以及判斷是否處于 Mutil-window 模式缘屹。

  1. Activity.inMultiWindow()
    是否處于 multi-window 模式凛剥。

  2. Activity.inPictureInPicture()
    是否處于畫中畫模式.

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

  1. Activity.onMultiWindowChanged(boolean inMultiWindow)
    系統(tǒng)會在activity進入或者退出 mutil-window 模式回調(diào)這個方法。它會傳遞一個值指示activity是否進入 mutil-window 模式轻姿,true 代表正在進入 mutil-window 模式犁珠,false 代表正在退出。
  2. Activity.onPictureInPictureChanged(boolean inPictureInPicture)
    系統(tǒng)會在activity進入或者退出 畫中畫 模式回調(diào)這個方法互亮。它會傳遞一個值指示activity是否進入畫中畫模式犁享,true 代表正在進入畫中畫模式,false 代表正在退出豹休。

Fragment也有對應(yīng)的方法炊昆,比如說Fragment.inMultiWindow()

感想

  1. 我覺得這是Android N絕對殺手級的feature,想想能邊看電影邊微信就覺得很滿足威根。
  2. Android 平板之前一直被詬病沒有多少適合的App凤巨,這下可好了,直接分屏使用医窿,爽爆炸磅甩。特別Google對Pixel C還有25%的優(yōu)惠
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姥卢,一起剝皮案震驚了整個濱河市卷要,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌独榴,老刑警劉巖僧叉,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棺榔,居然都是意外死亡瓶堕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門症歇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郎笆,“玉大人,你說我怎么就攤上這事忘晤⊥痱荆” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵设塔,是天一觀的道長凄吏。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么痕钢? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任图柏,我火速辦了婚禮,結(jié)果婚禮上任连,老公的妹妹穿的比我還像新娘蚤吹。我一直安慰自己,他們只是感情好课梳,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布距辆。 她就那樣靜靜地躺著,像睡著了一般暮刃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爆土,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天椭懊,我揣著相機與錄音,去河邊找鬼步势。 笑死氧猬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坏瘩。 我是一名探鬼主播盅抚,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼倔矾!你這毒婦竟也來了妄均?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤哪自,失蹤者是張志新(化名)和其女友劉穎丰包,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壤巷,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡邑彪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胧华。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寄症。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矩动,靈堂內(nèi)的尸體忽然破棺而出有巧,到底是詐尸還是另有隱情,我是刑警寧澤铅忿,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布剪决,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柑潦。R本人自食惡果不足惜享言,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渗鬼。 院中可真熱鬧览露,春花似錦、人聲如沸譬胎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堰乔。三九已至偏化,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镐侯,已是汗流浹背侦讨。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苟翻,地道東北人韵卤。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像崇猫,于是被迫代替她去往敵國和親沈条。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,749評論 25 707
  • afinalAfinal是一個android的ioc诅炉,orm框架 https://github.com/yangf...
    passiontim閱讀 15,408評論 2 45
  • 多窗口功能介紹 概述 Android 從 Android N(7.0)版本開始引入了多窗口的功能蜡歹。 關(guān)于Andro...
    i_cassell閱讀 7,220評論 0 9
  • 我們讀了十二章善用時間后,首先知道怎樣的事情要建立一個項目汞扎,比如那些一個動作完成不了的事情季稳,它受時間及空間...
    一枚沉香閱讀 751評論 0 0
  • 現(xiàn)在有一種記事本叫手帳,實際上是小時候的粘貼本和日記的結(jié)合體。我試著玩過。 手帳很好玩从媚。及時,多樣铛漓,...
    書書蟲閱讀 618評論 5 4