2012-07-24 127 views
0

我需要在Android SDK v9中調用方法,同時保持與舊版本的兼容性。向後兼容Android

Android developer blog建議使用反射或包裝類,但是這一切都真的有必要嗎?爲什麼我不能這樣做?

if (Build.VERSION.SDK_INT >= 9) 
    callNewMethod(); 

在我看來,這將工作由於Java運行時鏈接,因爲我正在與SDK 9建設。這種方法有什麼問題嗎?

在此先感謝...

+0

這正是我所做的,對我一直工作得很好。但是,這只是我的0.02美元,我們會看到如果有人可以給出比這更好的答案... – Eric 2012-07-24 18:35:45

+0

而不是使用數字9作爲API級別,使用Build.VERSIONS.XXX其中xxx是由谷歌定義的API版本。只是說:D。 – 2012-07-24 18:40:46

+0

只是猜測:由於Java是一種靜態編譯的語言,因此每個編譯單元(Java中的一個類)都有一個依賴項的列表,在運行該單元的代碼之前由加載程序解決。如果使用callNewMethod(),如果在運行時沒有callNewMethod(),則可能無法加載類。 – Javier 2012-07-24 18:43:18

回答

1

根本沒有。實際上,它是在開發具有廣泛API級別目標的應用程序時被推廣爲最佳方法的。

如果您不知道類內容和方法是否存在,則反射類是最堅實的方法。但在Android中,您知道什麼是受支持的,哪些不受支持。

因此,我不喜歡你給的博客:p

1

不一定是更好的答案,但你在那裏做檢查假定OS/ROM的建設者正確設置該值。如果設置不正確,則可能嘗試訪問SDK 9中實際不存在的方法。使用反射是通過嘗試調用不存在的方法100%確定不會生成運行時錯誤的唯一方法。