今年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