在学习分屏相关专题时候,我们进入到分屏的方式都是在桌面的最近任务中进行选择2个Task来进入到分屏的。

但是这种进入分屏的方式明显有以下几个缺点:
1、必须要用户手动操作到桌面的最近任务,而且点击最近任务卡片的的“Split Screen”按钮
2、如果要省略最近任务手动点击步骤,还必须获取到SplitScreenController相关的接口对象直接调用startTasks相关接口。
但是这个接口一般只有Launcher从systemui中获取到了。
基于上面的一个启动分屏介绍,如果想要在任意地方启动分屏,那么有什么有更加简单的启动分屏方式吗? 今天马哥带大家来看看另一种启动分屏的方式:
使用FLAG_ACTIVITY_LAUNCH_ADJACENT进行启动分屏。
这里启动在系统源码中就有这样一个分屏启动的demo,对应路径如下: development/samples/MultiWindow
MultiWindow的工程结构非常简单:
manifet文件:
package="com.example.android.multiwindow">
<application android:label="Multi Window">
<activity android:name=".CaptionOverlayActivity"
android:label="Caption Overlay"
android:resizeableActivity="true"
android:exported="true"
android:theme="@android:style/Theme.Holo.Light">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".LaunchingAdjacentActivity"
android:exported="true"
android:label="Launch Adjacent">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
启动分屏实战核心代码如下:
Intent intent = new Intent("android.settings.SETTINGS");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
startActivity(intent);
编译安装验证一下效果:
make MultiWindow
adb install -r out/target/product/emulator_x86_64/system/app/MultiWindow/MultiWindow.apk
效果如下:
然后发现会进入分屏:
那么大家肯定会有疑问,为啥就简单加入了一个FLAG_ACTIVITY_LAUNCH_ADJACENT就可以进入分屏呢?系统到底做了什么呢?这些疑问就留给各位学员的作业,大家进行剖析FLAG_ACTIVITY_LAUNCH_ADJACENT相关原理哈。
1、剖析出FLAG_ACTIVITY_LAUNCH_ADJACENT在system_server的相关流程和处理
2、剖析出FLAG_ACTIVITY_LAUNCH_ADJACENT如何触发在systemui的相关SplitScreen启动对应分屏
3、针对FLAG_ACTIVITY_LAUNCH_ADJACENT这个flag启动分屏方式,一般的适用场景和优缺点,你有什么启动分屏的相关的改进建议或者想法
其他分屏相关干货实战项目知识:

三分屏课程首发活动优惠开始啦,新老顾客都有折扣优惠,具体感兴趣的朋友,了解详细优惠可以私聊马哥微信
