2015-09-27 68 views
6

我太久沒有問這個問題了。我在Android中遇到了許多方法,這些方法已被棄用,但仍然可以在更新版本的API中使用。那麼只要它有效,使用廢棄方法的風險是什麼?我應該如何在Android中使用/不使用已棄用的方法

下面是一個更具體的問題。我正在使用TimePickers,getCurrentHour()方法在API 23中已被棄用,並被替換爲getHour()。我顯然不能僅僅使用getHour(),因爲大多數設備還沒有在API 23上,但是使用getCurrentHour()對於最新版本的Android「錯誤」?我應該做以下哪項?

  1. 繼續使用getCurrentHour()直到數年過去並且API 23成爲我的新minSdkVersion
  2. 在代碼中,顯式檢查API版本並根據結果調用getCurrentHour()getHour()

謝謝你幫助我學習。

+0

的受到傷害'在代碼中,明確檢查API版本,並呼籲任何getCurrentHour()或基於結果getHour()'這是?正確的方式 – tyczj

回答

9

使用getCurrentHour()「錯誤」爲最新版本的Android?

如果通過「錯誤」,你的意思是它會殺死一隻小狗,不,它不會錯。而對於API Level 23,這不太可能導致任何問題。

一般而言,「不推薦」意味着「我們有其他我們希望您使用的東西」。棄用的東西會發生什麼變化:

  • 有時候,棄用的東西在數年後仍然可用。 AbsoluteLayout已於2009年棄用於API級別3中。它今天的工作方式仍然與當時的情況類似。

  • 有時候,棄用的東西會減少功能。出於安全和隱私的原因,ActivityManager上的各種方法已被棄用,並返回他們以前使用的子集。 (請參閱:Android 6.0中的HttpClient(或者實際上,因爲它已被刪除而沒有看到它))。有時,不推薦使用的東西將被徹底刪除(請參閱:Android 6.0中的HttpClient(或者實際上,因爲它已被刪除而看不到它))。這很不尋常。

因此,棄用警告是一個標誌,需要注意並思考您的長期戰略對於這一特定位的功能。

我應該做以下哪一項?

對於微不足道,因爲這方法命名的東西,你很可能與你的第一選擇安全(堅持使用過時的方法,直到你minSdkVersion升至足夠高)。

對於任何比這個大得多的東西,我會選擇第二個選項。有時候,你會明確地進行版本檢查。有時候,你可以使用一個庫來隱藏你的版本檢查。例如,在support-v4庫中的任何地方,您都會看到類...Compat(例如,,NotificationCompat,ContextCompat,ActivityCompat),該類的作用是提供一個相當於最新和最大的API級別的API,但是它可以用於各種設備,因爲它可以在舊設備上正常降級爲你做這些版本檢查。

注:沒有實際的小狗在創建這個答案

+0

不要忘記kittehz太.. xD – t0mm13b

+0

這正是我尋找的答案,我希望別人找到它,並找到它有用:) – NSouth

+0

如何找出是否可以使用圖書館將爲你做的工作?我發現自己面臨與TimePicker的OP相同的問題,並且只是「正確地做它」,即在決定使用哪種方法之前檢查「android.os.Build.VERSION.SDK_INT> = 23」。 Studio仍然在棄用的函數中劃出一條劃線,並給了我一個警告,雖然:-(我是否缺少一個或多個技巧? – Yannick

相關問題