7

我已经很久没有问这个问题了。我在 Android 中遇到过许多已弃用的方法,但仍可在较新版本的 API 中使用。那么,只要可行,使用已弃用的方法有什么风险呢?

这是一个更具体的问题。我正在使用 TimePickers 并且getCurrentHour()方法在 API 23 中已被弃用,并被替换为getHour()。我显然不能getHour()独占使用,因为大多数设备还没有使用 API 23,但是getCurrentHour()最新版本的 Android 使用“错误”?我应该做以下哪一项?

  1. 继续使用getCurrentHour()直到几年过去 API 23 成为我的新版本minSdkVersion
  2. 在代码中,显式检查 API 版本并根据结果调用getCurrentHour()或调用?getHour()

谢谢你帮助我学习。

4

1 回答 1

13

对最新版本的 Android 使用 getCurrentHour() “错误”?

如果“错误”的意思是它会杀死一只小狗,不,它不会错。对于 API Level 23,它不太可能引起任何问题。

一般来说,“已弃用”的意思是“我们希望您使用其他东西”。弃用的东西会发生什么变化:

  • 有时,已弃用的东西在多年后仍然可用。AbsoluteLayout早在 2009 年就在 API Level 3 中被弃用了。今天它仍然像当时一样疯狂地工作。

  • 有时,不推荐使用的东西会减少功能。出于安全和隐私原因,不推荐使用各种方法,ActivityManager并返回它们过去使用的方法的子集。

  • 有时,不推荐使用的东西会被彻底删除(请参阅:Android 6.0 中的 HttpClient(或者,实际上,看不到它,因为它已被删除))。这是相当不寻常的。

因此,弃用警告是一个信号,需要注意并思考您对这一特定功能的长期策略是什么。

我应该做以下哪一项?

对于像这个方法重命名这样微不足道的事情,你可能对你的第一个选项是安全的(坚持不推荐使用的方法,直到你minSdkVersion上升到足够高)。

不过,对于比这更大的事情,我会选择你的第二个选项。有时,您会明确地进行版本检查。有时,您可以使用会为您隐藏版本检查的库。例如,在support-v4库中几乎任何你看到一个...Compat类(例如,、、、NotificationCompat)的地方ContextCompatActivityCompat该类的作用是提供一个等效于最新和最好的 API 级别的 API,但它可以用于广泛的设备,因为它通过为您执行这些版本检查而在旧设备上优雅地降级。

注意:在创建此答案时没有伤害任何实际的小狗

于 2015-09-27T13:13:00.420 回答