为不同的API级别实现多种方法,如果不决定要调用哪个方法,则不执行

时间:2019-04-07 15:40:05

标签: android android-api-levels

我想知道是否有可能实现多种方法来支持不同的API级别并调用正确的 if(android.os.Build.VERSION.SDK_INT >= ...) else if...吗?

我想使用android平台的新功能,例如streams等,并且仍然支持向后。

示例:

编写一种方法

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或其他方式注释我的方法??

我看到了这个question,但答案是否定的。

1 个答案:

答案 0 :(得分:0)

  

如何在当前运行的版本中使用正确的方法,而不要在其他情况下执行此操作

不能。在某个地方,需要进行版本检查并将其路由到适当的逻辑。

  

也许用@RequiresApi(),@ TargetApi或其他方式注释我的方法??

那些可以帮助告知编译器您知道自己在做什么的人。他们不会代码生成版本比较。

根据您的工作,现有的...Compat类可能会为您处理版本检查(例如NotificationCompat.Builder)。如果您使用的是Kotlin,我们可以提供一些隐藏if检查的时髦代码。可能会有一个第三方库提供一些基于注释的代码生成器,该代码生成器可代码生成if检查。