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