我想知道是否可以实现多种方法来支持不同的 API 级别并在没有if(android.os.Build.VERSION.SDK_INT >= ...) else if...
的情况下调用正确的方法?
我想使用 android 平台的新功能,如流等,并且仍然支持向后。
例:
编写了一个方法
public void myMethod24() {
// some logic requires api level N(24) and above
}
但是我的应用程序支持较低的 API,所以我需要另一种与它们兼容的方法。
以下是与旧版本兼容的方法:
public void myMethod21() {
// the same logic, requires api level LOLLIPOP(21) and above
}
如何为当前运行的版本使用正确的方法,而不会这样做,否则:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
myMethod24();
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
myMethod21();
}
也许用@RequiresApi((,@TargetApi或其他东西注释我的方法..?
我看到了这个问题,但答案是 如果不是。
如何为当前运行的版本使用正确的方法而不这样做,否则会很丑陋
你不能。在某个地方,某些东西需要执行版本检查并路由到适当的逻辑。
也许用@RequiresApi((,@TargetApi或其他东西注释我的方法..?
这些是为了帮助建议编译器你知道你在做什么。它们不会通过代码生成版本比较。
根据您正在执行的操作,现有的 ...Compat
类可能会为您处理版本检查(例如,NotificationCompat.Builder
(。如果您使用的是 Kotlin,我们可以想出一些时髦的代码来隐藏if
检查。并且可能有一个第三方库提供一些基于注释的代码生成器,用于代码生成if
检查。