英文原文:And Now, Your 'L' API Change WTFs
每次 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 中还有很多变化,尤其是一些大的变更。但是我比较重视的就只有这些。如果读者有兴趣,请自行阅读本文没有提到的一些内容。
翻译: 伯乐在线 - chris
译文链接: http://blog.jobbole.com/73577/