我知道(至少)有两种方法可以进行运行时检查,以确保我的代码不会调用不存在的 API:
使用条件版本号检查,a la
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
使用 java.lang.reflect 和包装类技术,如下所述:http ://android-developers.blogspot.com/2009/04/backward-compatibility-for-android.html
但是我不明白什么时候应该使用一种技术来代替另一种。在尝试使用可能不存在的Android类时,反射似乎是必要的,因为加载我的代码中引用的此类类会导致致命错误。但是调用属于我知道存在的类的方法呢?例如,在运行 2.2 (API 8) 的设备上:
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
ActionBar actionBar = getActionBar();
}
...
这总是安全的,还是在某些情况下会发生崩溃?是否有任何理由使用反射而不是使用上述版本检查来检查 Activity 中是否存在“getActionBar”方法?