簡體   English   中英

Android SDK版本

[英]Android SDK version

我很困惑應用程序在不同的Android版本上啟動時的行為方式。

假設我正在使用SDK級別4進行編譯。它是否在代碼中編譯,並且在使用SDK 10的手機上運行時仍將使用舊的SDK 4,否則它將使用SDK 10?

一個簡單的例子是Service的setForeground() -method,它已被棄用。 如果我在帶有SDK 10的手機上運行此類代碼,該功能是否會起作用,還是會使用SDK 4中的版本?

onStart()被棄用也是如此。 是否會在SDK 10上被忽略,它會嘗試調用onStartCommand()

如果有人能解釋我將會發生什么以及為什么會這樣,我會感激不盡。

它是在代碼中編譯的,當在手機上運行時,SDK 10仍然會使用舊的SDK 4,還是會使用SDK 10?

SDK意味着軟件開發工具包,因此設備不使用SDK運行任何東西。 另一方面,設備具有屬於特定API的不同種類的OS。

如果運行使用SDK 4編譯的構建,並在運行API 10的設備中運行它,它將使用新API(稱為向后兼容性)運行它。

通常,較新版本的SDK支持不推薦使用的功能。 他們中的大多數都可以使用,但你必須嘗試不使用它們。 當然,在某些情況下,您無法選擇,例如,當您使用的方法已棄用但在您使用的舊SDK中沒有替換時。

您的服務只是編譯的字節碼 - 具有自己的類和對其他類和方法的引用。 當它部署在較新的Android版本上時,它(android,OS)會做任何它認為合適的事情 - 你沒有影響力。 與其他基於java的系統一樣,它將依賴於正確的類名/包/接口,並嘗試使用某些簽名(參數和返回值)來解析方法。 如果它在社交方面表現,它將首先檢查是否有來自較新接口的方法(即onStartCommand()),如果它是可用的,它將被調用。 然后它可能(或不)回退到舊方法。 但通常你可以依賴反向兼容性保持相當長的時間。

在大多數手機上大多數已棄用的api調用都可以正常工作......但是,由於開發人員誤用了它(在不通知用戶的情況下將服務設置到前台),因此已刪除某些內容,例如您給定的setForeground()示例。 所以他們不會工作。 不幸的是,沒有哪些文檔可以支持哪些,哪些不支持,這是一個反復試驗的事情......

此外,由於某種原因,不同的實現(電話制造商/型號)之間存在差異。 一個很好的例子是舊的Contacts APi(pre V2.0),它適用於一些使用Android 2.2 / 2.3的新手機,並且不適用於具有相同操作系統版本的其他手機......最好的選擇是不要使用棄用的方法,並根據Android OS版本的當前流行度進行調整(目前2.1,2.2,2.3.2,2.3.3是流行版本: http//developer.android.com/resources/dashboard/platform-versions。 HTML )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM