我知道有(至少)兩種方式做運行時檢查,以確保我的代碼不會調用的API不存在:Android的向後兼容性:反射對簡單的條件檢查
使用有條件的版本號檢查,一拉
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();
}
...
這是總是安全,還是有情況,其中一個崩潰會怎樣呢?是否有任何理由檢查活動中是否存在使用反射而不是使用上述版本檢查的「getActionBar」方法?