eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 2076|回复: 3
收起左侧

将多窗口特性作为Android* 的差异化

[复制链接]

签到天数: 16 天

连续签到: 1 天

[LV.4]偶尔看看III

52

主题

99

帖子

1063

e币
发表于 2016-3-14 14:33:01 | 显示全部楼层 |阅读模式

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
概述
多窗口是 Android* 操作系统具备的一项特性,可让您的应用变得与众不同。 许多原始设备制造商 (OEM) 以及原始设计制造商 (ODM),比如三星、蓝魔和华为,都使用该特性进行产品推广,并取得了良好的效果。 本文将介绍多窗口特性,并展示如何在应用中实施该特性。
图 1. 多窗口使用案例
简介
2012 年 6 月,首款名为 Cornerstone 的开源多任务处理框架研发成功。 2012 年 8 月,三星发布了第一款多窗口商用产品。 从 2013 年到现在,市场上的多窗口解决方案呈爆炸式增长(见图 2)。
图 2. 多窗口演进
多窗口主要呈现两种风格:悬浮风格和停靠风格. 多窗口特性通常包含开启/关闭、调整大小和切换 (swap) 功能。 开启/关闭功能能够启动/停止该特性。 调整大小功能支持用户改变窗口的大小。 切换功能可交换窗口的位置。
图 3. 多窗口的窗口风格
2013 年,多款由 OEM/ODM、ISV 或开源社区开发的解决方案相继面市。 下表将不同多窗口解决方案进行了对比。
特性
Cornerstone
Standout
Xposed
Tieto

描述面向 Android* 操作系统的多任务处理框架可用于创建浮动应用的开源库支持停靠窗口风格的多窗口应用该项目旨在打造类似台式机的用户体验
开启/关闭,调整大小,最大化支持支持支持支持
窗口风格停靠浮动停靠停靠/浮动
代码修改Android 框架应用层Android 框架Android 框架
应用支持支持所有应用,但 SurfaceView 无法动态调整部分辅助应用,例如计算器等。需提高应用兼容性和稳定性支持所有应用
Android 版本Android 4.1 ~Android 4.4Android 4.1~
Android 4.4Android 4.4Android 4.4
官方网站http://www.onskreen.comhttp://forum.xda-developers.com/showthread.php?t=1688531http://forum.xda-developers.com/xposedhttps://github.com/tieto/multiwindow_for_android软件架构
你可以调整 Android 框架代码以适应更多功能。 Android 操作系统架构可以分层。
就 Android 4.2 和 Android 4.3 来说,启动器和其他应用均在一个堆栈上运行,称为 “主堆栈”。 众所周知,多窗口需要较多堆栈以包含多个窗口,因此我们需要调整框架的类 ActivityManagerService,从而添加堆栈创建和堆栈管理界面。 为方便查看而调整框架的类 WindowManagerService,我们需要调整框架的 inputManager,以将触控事件分派给相应的窗口。
新发布的 Android 4.4 和 Android 5.0 对堆栈管理做出了重大调整。 启动器和其他应用在不同堆栈上运行, 并添加了堆栈和堆栈管理功能。 如下所示为不同的 Android 版本在堆栈方面的区别。
图 4. Android* 4.3 和 Android 4.4 的堆栈管理差异
我们现在重点来看 Android 5(代号 “Lollipop”)。 我们都知道,Android* 操作系统使用回调方法触发活动界面功能。 但主要功能在框架上执行,因此我们来介绍两个重要的类:ActivityManagerService 和 WindowManagerService。
图 5. Lollipop 的软件结构
Lollipop 活动管理
由于多窗口特性主要依靠堆栈,因此我们下面来介绍如何创建堆栈,以及如何在堆栈上启动活动。
在 Lollipop 中,IactivityManager.java 添加了以下界面功能。
表 1. Lollipop 源代码更改
IactivityManager.java 新增界面功能
描述

public void moveTaskToStack(int taskId, int stackId, boolean toTop)将任务移到另一个堆栈上
public void resizeStack(int stackBoxId, Rect bounds)调整堆栈大小
public void setFocusedStack(int stackId)设置当前焦点堆栈
Public Boolean isInHomeStack(int taskId)无论是否在 HomeStack 中都获取任务
启动后,SystemServer 流程将启动活动管理服务和窗口管理服务。 我们可以添加 RuntimeException 语句,以追踪该流程。
图 6. Lollipop 中的堆栈创建进展
现在我们来看看如何在堆栈上启动活动。
图 7. 在堆栈上启动活动
在 Lollipop 中,adb (android debug bridge) 添加了以下命令。
表 3. Lollipop 的新 adb 命令
ADB 命令
功能
描述

Adb shell am stack start使用 Intent 在 <DISPLAY_ID> 上启动新活动Kitkat 4.4,adb 命令包含 adb shell am 堆栈创建。
Lollipop 5.0,adb commands adb shell am 堆栈创建删除
Adb shell am stack movetask将 <TASK_ID> 从当前堆栈移动至 STACK_ID 顶部或底部用法:adb shell am stack movetask task_id stackid true/false
注:适用于 KitKat,但不适用于 Lollipop。
Adb shell am stack resize将 <STACK_ID> 的大小和位置改成 <LEFT, TOP, RIGHT, BOTTOM>用法:adb shell am stack resize task_id weightLollipop 窗口管理
WindowManagerService 是核心窗口管理器, 其功能包括输入时间分派、屏幕布局和界面管理。
图 8. WindowManagerService 在显卡架构2 中的作用
关于多窗口的常见问题
多窗口具有调整大小的功能。 有的游戏动画无法调整大小。 其根本原因是 Android 函数 SurfaceFlinger 无法动态调整大小。
图 9. 使用 SurfaceFlinger 的游戏无法动态调整窗口的大小
另外一个问题是,部分应用无法在多窗口中正确显示。 以下示例表明:由于应用使用的兼容性配置较差,因此计算器无法在多窗口中显示。
图 10. 配置较差的计算器
新版 Android 是否支持多窗口?
Google 是否会在新版操作系统中支持多窗口特性? 我在 Lollipop 源代码中发现了以下日志信息。 我们使用以下命令搜索多窗口日志。
git log --grep “multiwindow”
日志内容中包含了一行 “defer tap outside stack until multiwindows”。 因此我们可以得出结论:多窗口可能已列入 Google 的路线图。
图 11. Lollipop 多窗口日志
案例研究: Cornerstone
Onskreen 开发的 Cornerstone,首款多窗口框架解决方案。 主要面向大屏幕设备和平板电脑。 大家可以从 GitHub3 下载源代码。 它仅支持 Android 4.1 和 Android 4.2, 但尚未在更高的 Android 版本上发布。 不过我们可以分析 Android 4.2 的源代码,了解更多技术详情。
图 12. Cornerstone 关于Jelly Bean 的调整
总结
目前,许多移动设备都使用运行操作系统的英特尔® 处理器。 开发人员如何改善用户体验? 他们的产品如何最具竞争性? 这些问题推动我们不断地改进基于英特尔® 架构 (IA) 设备的产品。 多窗口是一项极具竞争力的特性。 它有利于消费者同时处理多件事情。 他们可以观看视频和 IM,同时朋友分享视频反馈。 他们可以畅玩游戏,同时阅读评论。 部分设备目前可支持多窗口特性: 采用 Remix 操作系统的 Ramos i12 平板电脑、Teclast x98 平板电脑和 Cube i7。
图 13. IA 设备的多窗口特性
参考资源关于作者
Li Liang 拥有长春科技大学信号与信息处理专业硕士学位。 他于 2013 年加入英特尔,在开发商关系部门 CCE(客户端计算支持)团队担任一名应用工程师, 主要致力于让开发人员的应用在 Android 平台上脱颖而出。

点评

上海***会所,足不出户就能体验高品味享受,我们全天候准备为您服务!使您全身活力再现!把轻松`舒适`和快乐带给您!官网taosilespa.com电话/微信1:13370271997微信2:shanmo12580,务必同时加,qq:806   发表于 2016-8-24 23:34

签到天数: 127 天

连续签到: 1 天

[LV.7]常住居民III

1

主题

510

帖子

2678

e币
发表于 2016-12-30 14:14:48 | 显示全部楼层
谢谢,很好啊

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

0

主题

5

帖子

2

e币
发表于 2017-1-3 23:56:19 | 显示全部楼层
学习学习看看有木有用
*滑动验证:
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2017-11-23 15:25 , Processed in 0.536232 second(s), 42 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信