2014-02-26 40 views
4

我喜歡在android.webkit.WebView中使用findAll/findAllAsync方法。 findAll已被棄用,Google建議使用需要Jelly Bean或更高版本的findAllAsync。不過,我喜歡我的應用程序支持2.2+。我試着以下,但我得到的findAll(折舊)和錯誤報警的findAllAysnc(需要增加最低SDK版本):支持被新的代替方法的最好方法是什麼?

 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
      myWebView.findAll(query);   
     else 
     { 
      myWebView.findAllAsync(query); 
     } 

什麼是解決這個問題的最好方法是什麼?我應該只使用findAll並忽略棄用警告嗎?

回答

0

使用findAll,如果警告實在太煩人,請添加一個@SuppressWarning("deprecation")註釋以明確禁止它。

這樣做的一個問題是,當你在你的方法中使用這個註解時,你可能會錯過其他不推薦使用的調用,因爲它將應用於整個方法。

+0

我的錯誤,正確的註釋參數是「deprecation」,「dep-ann」是舊的javadoc,如果我記得不好的話。 –

0

我相信這個答案在幾個方面:

你在設置中表現爲最小SDK版本和目標SDK版本?

同樣的問題,但在Eclipse(或任何您使用的IDE)Android構建API屬性?

(我回答是,如果你的問題是「我怎麼擺脫Android的皮棉警告」,而不是「我怎麼正確解決警告」。)

0

有一個非常有趣和做你想做的事情的強大方式,它被稱爲反思。從Oracle的Java documentation

反射通常是由需要的能力, 檢查或修改在 Java虛擬機上運行的應用程序運行時行爲的程序使用。這是一個相對高級的功能,只有對這些語言的基礎知識 有深入瞭解的開發人員才能使用。

總之,反射讓你看看類的定義,你可以找到它的方法和屬性,並在運行時調用類的功能......一切!

我有一個應用程序需要處理Android 2.1設備上的音頻焦點,但Audio Focus不適用於這些版本,所以我使用這種技術。順便說一下,這是一條崎嶇不平的道路。我建議仔細閱讀文檔並嘗試遵循一些示例。

+0

反射有比虛擬方法調用更多的開銷,而這是一個強大的工具,它就像使用大錘釘在牆上。 – edthethird

+0

反射確實可以用於這種事情,並且確實非常強大,並允許在運行時檢查API是否可用。不過,我認爲避免編譯警告並不是一個好主意,並且對於這樣一個簡單的用例來說確實是過度的。 –

+0

@edthethird我完全同意,這是一個工作的地獄,但如果要求是'必須'這是一個優雅的路要走。 – Merlevede

相關問題