我应该如何 using/not 使用 Android 中已弃用的方法

How should I be using/not using deprecated methods in Android

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

这是一个更具体的问题。我正在使用 TimePickers 和 getCurrentHour() method is deprecated in API 23 and replaced with getHour()。我显然不能专门使用 getHour(),因为大多数设备还没有在 API 23 上,但是正在使用 getCurrentHour() "wrong" 作为最新版本的 Android?我应该做什么?

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

感谢您帮助我学习。

is using getCurrentHour() "wrong" for the newest version of Android?

如果"wrong"你的意思是它会杀死一只小狗,不,它不会错。而对于 API 级别 23,它不太可能引起任何问题。

一般来说,"deprecated"就是"we have something else that we would like you to use"。弃用的内容会发生什么变化:

  • 有时,已弃用的内容在多年后仍然可用。 AbsoluteLayout 于 2009 年在 API 级别 3 中被弃用。它在今天仍然像当时一样疯狂地工作。

  • 有时,已弃用的内容会减少功能。出于安全和隐私原因,ActivityManager 上的各种方法已被弃用,return 是他们过去使用的方法的一个子集。

  • 有时,已弃用的内容将被彻底删除(请参阅:Android 6.0 中的 HttpClient(或者,实际上,看不到它,因为它已被删除))。这很不寻常。

因此,弃用警告是一个标志,需要注意并思考针对这一特定功能的长期策略。

Which of the following should I do?

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

不过,对于任何比这大得多的东西,我会选择你的第二个选项。有时,您会明确地进行版本检查。有时,您可以使用一个库来为您隐藏版本检查。例如,在 support-v4 库中的几乎任何地方,您都会看到 ...Compat class(例如,NotificationCompatContextCompatActivityCompat), class 的作用是提供等同于最新最好的 API 级别的 API,但可以在广泛的设备上使用,因为它可以优雅地降级在旧设备上为您进行这些版本检查。

注意:在创建此答案时没有真正的小狗受到伤害