今年Google發佈了Android N,Android N新增了很多功能,最受關注的天然就是分屏了。html
這一功能對國內的不少手機用戶並不陌生,其實不少第三方系統早已經實現了這一功能,如EMUI,Flyme等等。android
在個人手機中,就能夠一邊看視頻,一邊瀏覽簡書。Android N分屏功能的更新,彷佛並不會對我國第三方Android系統帶來多大的影響。畢竟廠商有本身實現這一功能的套路。nginx
然而,谷歌反應的「緩慢」真的沒有價值嗎?其實不是的,Android N新增的功能是爲其餘第三方系統做出一個「標杆」。微信
這裏舉個例子,首先是分屏多任務,現在不一樣Android ROM實現該功能的方式不一,並且對軟件的兼容也大有不一樣,因此體驗也就可能差天共地(不能達到該有的標準),而Android N新增分屏多任務的支持,除了讓第三方ROM開發商能夠參照這個「模板」進行二次開發以外,軟件開發人員也能根據Android N分屏多任務功能的實現方式去進行軟件的開發。從而大大減小了本身摸索的時間,加快開發速度,由此支持該功能的軟件會更多,兼容性也會更好。app
分屏模式在Android電視中就變成了更爲強大的畫中畫模式,終於能夠一邊看比賽直播,一邊追電視劇了。ui
若是您的應用是使用 N Preview SDK 構建的,且未禁用多窗口支持,則應用默認支持分屏操做。spa
compileSdkVersion 'android-N' buildToolsVersion "24.0.0 rc4" defaultConfig { applicationId "com.yll520wcf.myapplication" minSdkVersion 14 targetSdkVersion 'N' versionCode 1 versionName "1.0" }
用戶能夠經過如下方式切換到多窗口模式:3d
用戶竟然還能夠在兩個 Activity 共享屏幕的同時在這兩個 Activity 之間拖放數據 (在此以前,用戶只能在一個 Activity 內部拖放數據)。想一想之後微博的圖片直接拖到微信朋友圈中是否是很屌啊。code
還須要注意的是多窗口不會影響Activity的生命週期。視頻
在多窗口模式中,在指定時間只有最近與用戶交互過的 Activity 爲活動狀態。 該 Activity 將被視爲頂級 Activity。 全部其餘 Activity 雖然可見,但均處於暫停狀態。 可是,這些已暫停但可見的 Activity 在系統中享有比不可見 Activity 更高的優先級。 若是用戶與其中一個暫停的 Activity 交互,該 Activity 將恢復,而以前的頂級 Activity 將暫停。
在多窗口模式中,用戶仍能夠看處處於暫停狀態的應用。 應用在暫停狀態下可能仍須要繼續其操做。
例如,處於暫停模式但可見的視頻播放應用應繼續顯示視頻。所以,咱們建議播放視頻的 Activity 不要在 onPause()方法中暫停視頻,應在onStop()暫停視頻播放,並在 onStart()中恢復視頻播放。
用戶使用多窗口模式顯示應用時,系統將通知 Activity 發生配置變動。 該變動與系統通知應用設備從縱向模式切換到橫向模式時的 Activity 生命週期影響基本相同,但設備不只僅是交換尺寸,而是會變動尺寸。您的 Activity 能夠自行處理配置變動,或容許系統銷燬 Activity,並以新的尺寸從新建立該 Activity。
給Activity加上以下配置能夠保證切換成多屏模式或者畫中畫模式時Activity不會銷燬重建。
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation">
在清單文件的 <activity>或 <application>節點中設置該屬性,啓用或禁用多窗口顯示:
android:resizeableActivity=["true" | "false"]
若是該屬性設置爲 true,Activity 將能以分屏和自由形狀模式啓動。 若是此屬性設置爲 false,Activity 將不支持多窗口模式。 若是該值爲 false,且用戶嘗試在多窗口模式下啓動 Activity,該 Activity 將全屏顯示。
若是您的應用面向 Android N,但未對該屬性指定值,則該屬性的值默認設爲 true。
若是作電視開發或其它特殊需求,還有一個屬性須要注意:
android:supportsPictureInPicture=["true" | "false"]
在清單文件的 <activity>節點中設置該屬性,指明 Activity 是否支持畫中畫顯示。若是 android:resizeableActivity爲 false,將忽略該屬性。
固然你還能夠指定在自由形狀模式時 Activity 的默認大小、位置和最小尺寸:
<activity android:name=".MainActivity"> <layout android:defaultHeight="500dp" android:defaultWidth="600dp" android:gravity="top|end" android:minimalSize="450dp" /> </activity>
對於 Android N,<layout>清單文件元素支持如下幾種屬性,這些屬性影響 Activity 在多窗口模式中的行爲:
在設備處於多窗口模式中時,某些功能會被禁用或忽略,由於這些功能對與其餘 Activity 或應用共享設備屏幕的 Activity 而言沒有意義。 此類功能包括:
Activity類中添加了如下新方法,以支持多窗口顯示。
每一個方法還有 Fragment版本,例如 Fragment.inMultiWindow()。
在啓動新 Activity 時,用戶能夠提示系統若是可能,應將新 Activity 顯示在當前 Activity 旁邊。 要執行此操做,可以使用標誌Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT。傳遞此標誌將請求如下行爲:
public void click(View v){ Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); }
用戶能夠在兩個 Activity 共享屏幕的同時在這兩個 Activity 之間拖放。所以,若是您的應用目前不支持拖放功能,您能夠在其中添加此功能。
View.DRAG_FLAG_GLOBAL_URI_READ
或 View.DRAG_FLAG_GLOBAL_URI_WRITE。
https://developer.android.com/preview/features/multi-window.html#running