谈一谈 Android L 的 API 变化

移动开发 Android
每次Android新版的发布,Google都会发布一个API变更报告,概括出对比前一个版本增加、改变、移除的API等信息。

每次Android新版的发布,Google都会发布一个API变更报告,概括出对比前一个版本增加、改变、移除的API等信息。

无论如何,Android L 开发者预览版差异报告已经随着javaDoc一起发布了,在(a poorly-structured ZIP archive)可以看到。我经常回顾这份资料,想看看这和Google I/O上呈现出的有多大差别。Android L 其实有不少很有意义的改变。

注意:这份分析是基于Android L 的开发预览版,也许在“L”发布之前很有可能这里说的一些东西会回到上一版本中,成为Android 5.0的一部分(而且叫什么名称也还不知道)。还有,虽然本文只展示一些我们关心的领域,但是强烈建议读者还是好好去看看实际发布的版本。

注意2:在Android上,“deprecated”(不推荐)指的是我们认为还有更好的方案可以使用。这里不能保证以后一定会一直支持这个部分,但是至少现在还是可以使用的。

关于注意事项,下面黑体字说明了版本变更情况:

  • Action Bar 导航:对于所有格式来说,都不建议使用了。这里就包括了Action Bar Tabs和下拉导航。我也在想如果限制了Action Bar tabs上面的各种操作的话,会怎么样呢?

  • 还有部分理由是Action Bar在开发中已经被另一种更容易操作的组件替代。Activity中有一个setActionBar()方法,需要一个Toolbar参数。 Toolbar就像一个简化版的ActionBar一样,可以放在视图结构的任何一个地方,相比只能锁定在顶部的ActionBar来说好多了。

  • Activities也可以“持久化”,还可以跨过重启。我想这点大概是为了对近期推出的一些功能的扩展吧,而副作用就是需要对 onSaveInstanceState()方法有新的认识,在Activity上我们需要操作Bundle和一个叫PersistableBundle 的东西,也许就是这个东西可以挽救系统重启带来的灾难。

  • 在ActivityManager中的getRecentTasks()和getRunningTasks()现在也不建议使用了,在Android L或者更高版本中会返回一个结果的子集。

  • BatterryManager现在可以直接获取电量信息了,而不用为ACTION_BATTERY_CHANGED注册一个null类型的receiver。

  • bindService()方法现在需要传入一个明确的Intent对象,如果你的目标sdk版本设置为L版本或者更高的话,建议使用隐式的Intent,以保证代码可读性,而如果你在服务中使用的话,要注意一下。据Alex Curran说,这会对IAP(in-ap pruchasing)的代码集成有影响。

  • 现在我们可以使用getExternalMediaDirs()方法,和getExternalFileDirs()方法类似,但是此方法可以被MediaStore扫描到。

  • 在DevicePolicyManager中已经加入了很多新的功能,可以更多地使用一些高级的API。

  • FragmentBreadCrumbs目前也不建议使用了。使用这个类的朋友们,为你们默哀。

  • 还有这里新加了一个启动器,帮助更容易找到相关的应用,不过这也和系统的配置有关(如果没设置成默认启动器的话,那是不行的)。

  • MediaStore新增了MediaStore.Audio.Radio,它还没有正式的文档资料,所以对于流媒体广播电台,传统的广播电台或者其它的来说,也会很不明确。

  • 在所有模式中,TOP_LEVEL_*这样的模式已经不建议使用了。也许这也反映出了顶级域名的数量也在不断增加。

  • Android上现在有很多关于探测“省电模式”的一些工具,在PowerManager上使用isPowerSaveMode()方法再加上一个 ACTION_POWER_SAVE_MODE_CHANGED广播就可以了。至于是否是在OEM直接纳入还是在系统框架中集成,那我就不好说了。

  • 最开始要做的事,像“undeprecated”这样的字眼,十分明确地指出了在设置时候出现INSTALL_NON_MARKET_APPS,由于安全问题,它已经从设置选项中移回到了这里,变成全局的。

  • web设置现在可以控制内容混合模式,可以控制webview是否从安全的来源中加载不安全的内容。

最后,其实Android L 中还有很多变化,尤其是一些大的变更。但是我比较重视的就只有这些。如果读者有兴趣,请自行阅读本文没有提到的一些内容。

责任编辑:闫佳明 来源: blog.jobbole
相关推荐

2021-02-19 09:19:11

消息队列场景

2018-08-21 14:42:29

闪存存在问题

2021-07-28 20:12:17

WindowsHeap内存

2022-02-14 22:22:30

单元测试Junit5

2014-07-17 08:52:11

Android LAPI

2022-07-04 10:51:27

数据中台数据仓库

2021-05-11 08:48:23

React Hooks前端

2021-11-23 09:45:26

架构系统技术

2015-03-27 15:07:55

云计算IaaS平台Docker

2016-07-08 13:33:12

云计算

2017-11-21 14:32:05

容器持久存储

2021-03-15 22:42:25

NameNodeDataNode分布式

2011-07-28 09:22:56

Oracle WDPOracle数据库

2019-01-30 10:59:48

IPv6Happy EyebaIPv4

2018-08-28 06:42:06

边缘计算SDNMEC

2020-06-19 15:32:56

HashMap面试代码

2019-11-12 08:40:03

RocketMQ架构

2020-11-20 10:22:34

代码规范设计

2018-09-05 15:15:58

来电显示来电显示欺诈身份

2011-07-28 09:49:04

Oracle数据库服务Oracle实例
点赞
收藏

51CTO技术栈公众号