Android Lollipop的新功能
Chinese (Simplified) (中文(简体)) translation by Zhang Xiang Liang (you can also view the original English article)
经过数月的猜测、炒作和玩笑,Google终于在2014年11月12日正式向全球发布了Android 5.0。其SDK已于11月3日发布。 由于2014年6月25日发布的L 预览SDK,我们已经了解了很多功能。但我们不知道L 代表什么。
Lollipop是5.0更新的名称。回头看,棒棒糖明显很喜爱。但是,如果给了足够的时间来推测,那么明显这再次给人惊喜。
Lollipop是Android平台的重要更新。这可以说是迄今为止最大也是最雄心勃勃的的发行版。
1.特点
既然Android SDK已经出来了,下面看看Android 5.0中的一些新功能。
电池
Volta计划
近年来,Google聚焦在操作系统特定开发方面发布的每个Android版本以及如何进行改进。对于5.0,该特殊方面是提高电池寿命。
JobScheduler
API允许你在延时后或特定条件下异步运行作业。JobInfo
对象可用于定义将在其下运行的条件计划作业。
由于这些补充,开发人员现在可以更好地控制耗电任务的执行时间和方式。
开发者工具
有一个新的ADB 命令 dumpsys batterystats
可用于生成关于设备上电池使用情况的统计数据。看看下面的命令,看看它是如何工作的。
adb shell dumpsys batterystats --charged <package-name>
通知
在Lollipop中,通知可以显示在锁定屏幕上。开发人员可以通过setVisibility
指定在通知中显示的信息量,它接受以下值:
-
VISIBILITY_PRIVATE
:显示基本信息,如通知图标,但是隐藏通知的内容 -
VISIBILITY_PUBLIC
:显示通知的内容 -
VISIBILITY_SECRET
:没有显示,甚至不包括通知的图标
元数据现在可以添加到通知中以允许类别和优先级,并收集其他联系人。
主要通知(例如来电)将显示在单机通知窗口中,该窗口将浮动在当前应用程序的顶部,直到用户确认或解除通知为止。



多任务处理
最近打开的屏幕已更名为overview。随着新的名称,新的API可以改进Android上的多任务选项。您现在可以将activity视为任务,并在overview屏幕的窗口中显示。
例如,可以设置Web浏览器应用程序,以便每个选项卡都有自己的窗口。在上一个最近屏幕中,将显示一个浏览器应用程序。



如果您有一个网站,您可以添加 <meta name="theme-color" content="#3F51B5
">到您的标题部分,指定overview显示给定的颜色作为网站的标题。
运行时和ART
以前的Android版本都使用了Dalvik作为进程虚拟机。应用程序通常用Java编写,然后将其编译为字节码。 然后翻译成Dalvik的字节码,并存储在.dex
和.odex
文件,然后用于Dalvik的过程。
这是一个非常基本的解释关于运行时正在做什么,并希望传达其重要性。应用程序在进程虚拟机上运行,因此虚拟机性能决定了应用程序的整体性能,并且虚拟机是瓶颈。
Dalvik使用JIT(Just In Time)编译,这意味着它只在需要的时候运行应用程序。
另一方面,ART使用AOT(Ahead Of Time)编译来编译字节码。 当安装应用程序时,它由ART的dex2oat
实用程序编译,它创建ELF可执行文件,而不是.odex文件。从那时起,应用程序从已编译的ELF可执行文件开始执行。
这种大量保存编译牺牲了更长的程序安装时间和一些额外的磁盘空间。
随着改进的垃圾回收(GC)的增加,ART几乎在每个方面都胜过Dalvik,从而使Android体验更加清晰和流畅。



Android TV
为了帮助您将应用程序带入大屏幕显示屏,Lollipop引入了Leanback UI和Android TV输入框架(TIF)。 Leanback库为电视应用提供UI控件。TIF旨在允许电视应用程序处理来自诸如HDMI输入、电视遥控器和IPTV接收器之类的视频流。
图像
Khronos OpenGL ES 3.1已添加。主要功能包括:
- 计算着色器
- 单独的着色器对象
- 阴影语言改进
- 高级混合模式和调试扩展
- 间接绘制命令
- 多采样和模板纹理
Android 5.0保持向后兼容OpenGL ES 2.0和3.0。
Android扩展程序包(AEP)
为了补充OpenGL ES 3.1,已经添加了一组允许以下内容的OpenGL ES扩展:
- 保证片段着色器支持着色器存储缓冲区、图像和原子(片段着色器支持在OpenGL ES 3.1中是可选的)
- 帧缓冲区中每个颜色附件的不同混合模式
- 镶嵌和几何着色器
- ASTC(LDR)纹理压缩格式
- 每个样本的插值和阴影
Chrome视图
Android Lollipop包含Chromium for Web View的新版本,基于Chromium m37版本,增加了对WebAudio 、WebRTC和WebGL的支持。
Web Components的本机支持也包含在更新中,并且允许使用 Polymer及其Material Design元素而不需要使用polyfill。
从Android 5.0开始,Chromium可以从Play Store更新,因此可以立即使用新的API和错误修复,并且不再需要更新Android操作系统。
媒体浏览
新的android.media.browseAPI
允许应用浏览其他应用的媒体内容库。MediaBrowserService
类用于在应用程序中暴露媒体,而MediaBrowser
类用于与媒体浏览器服务交互。
媒体播放控制
引入了两个新类使播放控制更简单为了可以跨不同的UI和服务进行管理。
MediaSession
取代RemoteControlClient
。它提供了一组用于传输控制和媒体按钮的回调方法。 MediaController
可用于创建自定义媒体控制器应用程序,然后可以将其发送到 MediaSession
。
新传感器
推出了两款新型传感器:
- 倾斜检测器:提高activity识别率
- 心率传感器:能够报告用户触摸设备的心率
当然,这两个传感器都需要支持的硬件。
托管配置
设备管理员可以使用托管配置服务将应用添加到单独的托管配置文件中。如果设备上有一个现有的个人帐户,那么管理的配置文件应用程序将与现有应用程序一起显示。



设备所有者
设备所有者是一种特殊类型的设备管理员,可以创建和删除次要用户并配置全局设置,实质上为Android提供传统的管理员和用户帐户系统。
屏幕固定
屏幕固定是与iOS上的kiosk模式相当的新功能。屏幕固定包括以下功能:
- 状态栏为空。
- 其他应用程序无法启动新的activity。
- 用户通知和状态信息被隐藏。
- 只要没有创建新的任务,当前的应用程序可以创建新的activity。
屏幕固定可以通过设置>安全>屏幕固定手动激活。它也可以通过编程方式激活。 startLockTask
方法可以从您的应用程序调用以激活屏幕固定。 如果应用程序不是来自设备所有者,则将显示确认提示。setLockTaskPackages
方法可以由所有者应用调用,并且不显示确认提示。
要停用屏幕固定,您需要通过设备所有者应用程序调用stopLockTask
。如果由非设备所有者激活,则用户可以通过保持背部和背部按钮来退出屏幕固定模式。
屏幕共享
通过新的android.media.projection
API 可以实现屏幕捕获 。 VirtualDisplay
方法允许调用应用程序将屏幕捕获到surface对象中,然后可以通过网络发送。API只能捕获非安全内容,不包括音频。
相机
由于新的android.hardware.camera2
API ,Android终于有了RAW图像捕获功能。
蓝牙低功耗
Android设备现在可以作为 蓝牙LE外设。应用程序可以利用这一点,使附近的设备知道他们的存在。 使用新的android.bluetooth.le
API,您可以启用应用程序连接到附近的蓝牙设备、广播广告和扫描响应。这些新功能也带来了新的权限许可 BLUETOOTH_ADMIN
。
使用可穿戴设备、健康、健身以及监控应用程序时,这些API将非常有用。所有这些都是近期预测的Android增长领域。
NFC
NFC在几个方面得到了改进:
- Android Beam现在是共享菜单中的一个选项。
-
invokeBeam
可用于启动数据共享。您不再需要物理碰撞设备。 -
registerAidsForService
和setPreferredService
已经被添加用于开发支付应用程序。
多个网络连接
新的API允许应用程序查询网络的可用功能,例如网络是否为蜂窝、计量或Wi-Fi。
渲染框架
位图图像现在可以使用新PdfRendered
类从PDF文档页面渲染。
输入法编辑器(IME)
您现在可以遍历平台可用的不同IME。这是通过使用shouldOffetToNextInputMethod
方法来实现的 。
2.Material Design
Android 5.0的最大特色之一就是Material Design。Material Design (MD)是与视觉设计、内容运动和用户交互相关的一套指导。 该指南旨在跨过Android,旨在为广泛的设备和平台设计。
聚合物是MD跨平台性质的一个显着的例子,谷歌创建了几个MD网站元素,以帮助建设具有MD主题的网站/网络应用程序。不说其跨平台的性质,MD仍然是Android 5.0的焦点。



新的控件
棒棒糖推出了两个新的控件:
-
CardView
:该控件允许以一致的方式将信息分组在一起。卡本身可以根据需要改变其深度以促进或突出显示。 -
RecyclerView
:这是一个更高级的ListView
控件。
新主题
有两个新的主题使用MD原则,即Dark Material 和 Light Material。两者都应用新的用户界面系统控件。 系统控件易于自定义,您可以设置其调色板。有几个动画和转换也是这些主题的默认,例如涟漪效应。



深度和阴影
现在可以通过新的Z属性在Android视图上更改深度。较高的Z值在视图周围产生较大的阴影,从而提高了海拔高度。 这是MD风格的一个主要部分,其目标是通过使用层来创建纺织品外观。
动画
MD的另一个主要内容是动画。触摸反馈动画和大量activity转场都有助于创造触觉和身临其境的体验。 目标是不要让信息弹出或消失。每个视图/对象应该在表面上显示为一个图层。
想像一个漂亮干净的白色书桌。在这个桌子上,你有各种各样的文件、后备注和文具。当你俯视桌子时,它不是一个平面的视图。 桌面包含多个图层,对象在下面的图层上具有不同的深度和投射阴影。
如果您需要在另一页面下方看到一个页面,则必须将覆盖页面移开。 如果要将笔记本电脑放在桌面上,则需要将现有的纸张滑出来,以便腾出空间。当您触摸桌面上的东西时,它会移动、弯曲、振动和重置。
3.使用Android 5.0
要开始使用Android 5.0,请在首选的IDE中下载v21的SDK平台。这很可能通过Eclipse或Android Studio中的SDK manager完成。
在ApplicationManifest.xml文件和/或文件中,将 build.gradle targetSdkVersion
设置 为 21
。
重要更改和注意事项:
在超级英雄世界中有一句话:“权利越大,责任越大。” 在开发社区有一句类似的话,“更新越大,测试越深”。
如果您已经有Android应用程序,这是一个快速清单:
- 我的应用程序在ART上运行无问题吗?
- 如果我的应用程序使用通知,它们将如何集成到锁定屏幕中?
- 用户界面可以从刷新中获益吗?MD是否适合,涉及多少工作?
-
RemoteControlClient
类现在已经废弃,所以我应该转到MediaSession API
? -
WebView
默认情况下阻止混合内容和第三方Cookie。我需要使用setMixedContentMode
和setAcceptThirdPartyCookies
吗?
完整的列表列表可以在 Android开发者网站上找到。
4.向后兼容性
Android 5.0中最大的变化之一是使用MD用户界面。利用MD和最佳设计实践来进行使用,需要开发人员的大量考虑和工作。
对于现有应用程序,开发人员面临更多挑战,例如如何利用5.0的新功能同时保持向后兼容性,从而在不同的API级别提供一致的用户体验。
为了展示如何在你的项目中使用Android 5.0和MD,我创建了一个简单的应用程序。它由一个显示几个控件的单个activity组成。然后,我将以下内容添加到res/
文件夹中:
-
menu-v21/:
它包含menu_main.xml的副本,用于在Android 5.0设备上显示MD图标。 -
values-v11/:
它包含一个styles.xml文件,将所有运行Android 3.0或更高版本设备的基础主题设置为holo.light。在此文件中也对操作栏进行了外观更改。 -
values-v21/:
它包含一个styles.xml文件,它将基础主题设置为在Android 5.0及更高版本上运行设备的material.light 。 它还定义了基本颜色。
下图显示了在4.4.2设备和5.0设备上运行的应用程序。MD主题已被应用于5.0以上的设备。 其他设备将会收到holo.light主题。它显示了主题和它们之间的用户界面差异的默认状态。



颜色和Action Bar
使用MD,定义应用程序的基本颜色以适应您的品牌从未如此简单。例如,将以下代码添加到主题中将设置通知栏背景、操作栏背景和用户界面控件。
<!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Material.Light"> <!-- Customize your theme here. --> <!-- Main theme colors --> <!-- your app branding color for the app bar --> <item name="android:colorPrimary">#0d7963</item> <!-- darker variant for the status bar and contextual app bars --> <item name="android:colorPrimaryDark">#ff0d5b47</item> <!-- theme UI controls like checkboxes and text fields --> <item name="android:colorAccent">#0d7963</item> </style>
结果非常醒目,应用程序一眼就可以识别。还有一套新的“ MD”图标,这是将现代用户界面感觉带入任何现有应用程序的另一种快捷方便的方式。
以下是使用“MD”图标和定义主要主题颜色所做的不同之处:



使用action bar和颜色是MD的主要特征,可以有效地标识和区分您的应用程序。在不同API级别之间提供一致的用户体验的一种方法是将这些功能复制到不同API级别的样式和主题。
例如,如果我们将在4.4.2设备上运行的应用程序与5.0设备进行比较:



正如你所看到的,他们对他们有非常独特的看法。为了改善这一点,我们可以在低于5.0的API级别上使用相同的MD图标。我们还可以对action bar进行风格化,使其类似于MD版本。
对于图标,我们可以将res / menu / menu-main.xml中的图像更改为MD图标。对于action bar,我们可以编辑res / values-v11 / styles.xml文件,如下所示:
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light"> <!-- Customize your theme here. --> <item name="android:actionBarStyle">@style/MyActionBar</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">#0d7963</item> </style> </resources>
这是另外两个比较,改变之后:



在4.4.2设备上运行的版本随着我们的应用程序和我们的品牌而变得更加可识别。没有任何重大变化,应用程序在不同的API中看起来更加一致,并具有更加现代的感觉。
使用不支持的功能
某些功能是Android Lollipop的独家功能,最显着的是activity转换和显示动画。这并不一定意味着你必须放弃使用它们,或者创建一个使用它们的单独应用程序。您可以在运行时检查系统版本,并且只有在应用程序在适当的Android版本上运行时才执行某些API调用。 .
检查系统是否为5.0+的示例:
// Check if we're running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Call some material design APIs here } else { // Implement this feature without material design }
保持以前的主题
你可以做某事并不总是意味着你应该这么做。自从Honeycomb以来,Android一直在使用的Holo主题绝对没有错。 您可以提供其他布局和主题,并将其应用于不同的API级别。例如,您可以将MD主题应用于API 5.0以上的所有设备。 Holo主题将适用于API 3.0及以上的任何设备。最后,经典主题可以应用于3.0以下的所有设备。
为此,您将在项目中使用以下目录:
- res / values /(默认位置)
- res / values-v11 /(for 3.0 +)
- res / values-v21 /(for 5.0 +)
在每个目录中,您可以放置一个将定义所需主题的styles.xml文件。
支持库
V7 r21支持库支持MD中的几个控件和功能。
Theme.AppCompat 可以通过扩展其中一个AppCompat主题来使用调色板。例如 Theme.AppCompat.Light
:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/material_blue_500</item> <item name="colorPrimaryDark">@color/material_blue_700</item> <item name="colorAccent">@color/material_green_A200</item> </style>
它还提供了以下MD控件:
- EditText
- CheckBox
- Spinner
- RadioButton
- SwitchCompat
- CheckedTextView
V7支持库还可以访问新的CardView
和 RecyclerView
控件。
如果您在布局设计中使用AppCompat,则可以创建一个单一的布局,以便在多个API级别上保持相同的视觉效果。
要使用V7支持库,您需要添加到项目。如果您使用的是Android Studio和Gradle,则可以将其添加到build.gradle
文件中的依赖关系部分:
dependencies { compile 'com.android.support:appcompat-v7:21.0.+' compile 'com.android.support:cardview-v7:21.0.+' compile 'com.android.support:recyclerview-v7:21.0.+' }
引入v7支持库时,您必须将其设置 minSdkVersion
为 7。
结论
Android 5.0是一个主要版本。ART和屏幕通知等更新会立即产生影响。其他更新,如MD、Overview和Job Scheduling将需要时间开发人员才能实施和采用。
用户也将在塑造Android的不久将来发挥重要作用。以前尝试将Android引入电视领域并没有受到好评。智能电视整体尚未成为必备设备。
在多个设备和屏幕上拥有统一和熟悉的用户体验令人兴奋,在我看来,势在必行。然而,这一成功最终将取决于采用和用户需求。
Google在今年的Google I / O上设置了舞台,而Lollipop演员现在已经组装了。无论表演时间多长,至少Google尝试过。
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly