API 级别:21
Android 5.0 (LOLLIPOP) 为用户和应用开发者提供了新的功能。本文档介绍了最值得注意的新 API。
有关新平台功能的扼要介绍,另请参阅 Android Lollipop 集锦。
开始开发
要构建 Android 5.0 版应用,您必须先下载 Android SDK,然后使用 SDK 管理器下载 Android 5.0 SDK 平台和系统映像。
更新您的目标 API 级别
要进一步针对运行 Android 5.0 的设备优化您的应用,请将 targetSdkVersion
设置为 "21"
,在 Android 5.0 系统映像上安装该应用并予以测试,然后将更改后的新版应用发布出去。
您既可以使用 5.0 API,也可以支持旧版本,方法是在代码中构建条件,确保先检查系统 API 级别再执行 minSdkVersion
不支持的 API。要详细了解有关保持向后兼容的信息,请参阅支持不同平台版本。
要详细了解有关各个 API 级别运行方式的信息,请参阅什么是 API 级别?
重要的行为变更
请注意,如果您之前发布了 Android 版应用,那么您的应用可能会受到 Android 5.0 变化的影响。
如果您尚未针对新的 Android 运行时 (ART) 测试您的应用…
第 4.4 版引入了一个全新的实验性功能,即 Android 运行时 (ART)。在第 4.4 版中,ART 是可选的,默认运行时仍为 Dalvik。对于 Android 5.0,默认运行时现在是 ART。
有关 ART 新功能的概述,请参阅 ART 简介。主要包括下面的一些新功能:
- 预先 (AOT) 编译
- 经过改进的垃圾回收 (GC)
- 经过改进的调试支持
大多数 Android 应用应该不用做出任何更改即可直接在 ART 下运行。不过,Dalvik 上运行的部分技术在 ART 上无法运行。要了解最重要的问题,请参阅在 Android 运行时 (ART) 上验证应用行为。请特别注意以下情况:
- 您的应用使用 Java 原生接口 (JNI) 运行 C/C++ 代码。
- 您使用的开发工具可生成非标准代码(例如某些混淆代码)。
- 您使用的技术与垃圾回收压缩不兼容。(虽然 ART 当前没有实施垃圾回收压缩,但在 Android 开放源代码项目中,垃圾回收压缩正处于开发阶段)。
如果您的应用实施通知…
请确保您的通知能够反映出 Android 5.0 的这些变化。要详细了解如何设计适用于 Android 5.0 及更高版本的通知,请参阅通知设计指南。
Material Design 设计样式
通知是在白色(或颜色非常浅的)背景上绘制的深色文本,以便与新的 Material Design 设计小部件协调一致。请确保所有通知在新的配色方案下都能够正常显示。如果通知无法正常显示,请予以修复:
- 使用
setColor()
在图标图片后面的圆圈中设置一种强调色彩。 - 更新或移除有颜色的资源。系统会忽略操作图标和主通知图标中的所有非 Alpha 通道。您应当假定这些图标仅包含 Alpha 通道。系统会用白色来绘制通知图标,而用深灰色来绘制操作图标。
声音和振动
如果您当前在使用 Ringtone
、MediaPlayer
或 Vibrator
类为通知添加声音和振动,请移除该代码,这样系统才能以优先模式正常呈现通知。若要添加声音和振动,请改用 Notification.Builder
方法。
将设备设置为 RINGER_MODE_SILENT
会导致它进入新的优先模式。如果将设备设置为 RINGER_MODE_NORMAL
或RINGER_MODE_VIBRATE
,则会使其退出优先模式。
以前,Android 将 STREAM_MUSIC
用作主音量流,以此来控制平板电脑设备的音量。在 Android 5.0 中,手机和平板电脑设备的主音量流现已统一,均由 STREAM_RING
或 STREAM_NOTIFICATION
控制。
通知在锁定屏幕上的公开程度
在 Android 5.0 中,通知现在默认显示在用户的锁定屏幕上。用户可以选择不公开敏感信息,这样的话系统会自动修改通知显示文本。要自定义这种经过修改的通知,请使用 setPublicVersion()
。
如果通知不包含个人信息,或者您希望在通知中显示媒体播放控件,请调用 setVisibility()
方法,并将通知的公开程度的级别设置为 VISIBILITY_PUBLIC
。
媒体播放
如果您要实施可呈现媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle
模板,而不是自定义RemoteViews.RemoteView
对象。无论您选择使用哪种方法,请务必将通知的公开程度设置为 VISIBILITY_PUBLIC
,以便用户可以在锁定屏幕中使用您的控件。请注意,从 Android 5.0 开始,系统不再在锁定屏幕中显示 RemoteControlClient
对象。有关详情,请参阅如果您的应用使用 RemoteControlClient。
提醒通知
现在,当设备处于活动状态(即设备未锁定且屏幕亮起)时,通知可以显示在小型浮动窗口中(也称为提醒通知)。此类通知采用的显示形式与紧凑型通知采用的形式类似,不同的是提醒通知还会显示操作按钮。用户无需退出当前应用,即可根据提醒通知执行操作或关闭提醒通知。
可以触发提醒通知的情景示例包括:
- 用户在全屏模式下执行操作(应用使用
fullScreenIntent
) - 通知的优先级较高,并且使用铃声或振动
如果您的应用在上述任意一种情景下实施通知,请确保提醒通知能够正常呈现。
如果您的应用使用 RemoteControlClient…
RemoteControlClient
类现已被弃用。请尽快改用全新的 MediaSession
API。
对于 MediaSession
或 RemoteControlClient
,Android 5.0 中的锁定屏幕不会显示传输控件。相反,您的应用可以通过通知在锁定屏幕中提供媒体播放控件。这样,您的应用就能够更好地控制媒体按钮的展现方式,同时还能让用户无论在设备处于锁定还是解锁状态下都可以执行同样的操作。
为此,Android 5.0 引入了一个新的 Notification.MediaStyle
模板。Notification.MediaStyle
将您通过Notification.Builder.addAction()
添加的通知操作转换到在您应用的媒体播放通知中内嵌的紧凑型按钮中。将会话令牌传递到 setSession()
方法,指示系统此通知控制正在进行的媒体会话。
请务必将通知的公开程度设置为 VISIBILITY_PUBLIC
,将通知标为安全通知,以便在任何锁定屏幕(安全屏幕或其他屏幕)上显示。有关详情,请参阅在锁定屏幕上显示通知。
如果您的应用是在 Android TV 或 Wear 平台上运行,请通过实施 MediaSession
类来显示媒体播放控件。如果您的应用需要在 Android 设备上接收媒体按钮事件,您还应当实施 MediaSession
。
如果您的应用使用 getRecentTasks()…
由于 Android 5.0 中引入了并行文档和活动任务这一新功能(请参阅下文中的“最近用过”屏幕中的并行文档和活动),ActivityManager.getRecentTasks()
方法现已被弃用,以更好地保护用户隐私。为了实现向后兼容性,此方法仍会返回它的一小部分数据,包括调用应用自身的任务,同时还可能包括其他一些非敏感任务(例如“首页”)。如果您的应用在使用此方法检索它自身的任务,请改用 getAppTasks()
检索该信息。
如果您使用的是 Android 原生开发工具包 (NDK)…
Android 5.0 支持 64 位系统。64 位增强功能增加了寻址空间并提高了性能,同时仍能全面支持现有的 32 位应用。64 位支持还提高了 OpenSSL 的加密性能。另外,此版本还引入了新的原生媒体 NDK API 以及原生 OpenGL ES (GLES) 3.1 支持。
要利用 Android 5.0 中提供的 64 位支持,请从 Android NDK 页面下载并安装 NDK 10c 版。要详细了解 NDK 的重要变化和错误修复,请参阅 10c 版版本说明。
如果您的应用绑定到某项服务…
Context.bindService()
方法现在要求获取显式 Intent
;如果获取的是隐式 intent,则会引发异常。为了确保您的应用是安全的,请在启动或绑定 Service
时使用显式 intent,并且不要为此服务声明 intent 过滤器。