日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android targetSdkVersion详解

發布時間:2025/4/5 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android targetSdkVersion详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android targetSdkVersion 原理

17 January 2016

前幾天 Google 官方發布文章解析 compileSdkVersion、minSdkVersion 以及 targetSdkVersion 的含義,以及合理設置各個值的意義,原文 Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion(后面簡稱 “原文”),還有翻譯版。

其中,compileSdkVersion 和 minSdkVersion 都非常好理解,前者表示編譯的 SDK 版本,后者表示應用兼容的最低 SDK 版本。但是對于 targetSdkVersion 其實很難一句話解析清楚,原文用了“萬能”的詞 —— interesting 來描述。以前我也有一些迷糊,看到有些人和我有同樣的困惑,本文試圖徹底解決這個問題。

原文是這么說的:

targetSdkVersion is the main way Android provides forward compatibility

targetSdkVersion 是 Android 系統提供前向兼容的主要手段。這是什么意思呢?隨著 Android 系統的升級,某個系統的 API 或者模塊的行為可能會發生改變,但是為了保證老 APK 的行為還是和以前兼容。只要 APK 的 targetSdkVersion 不變,即使這個 APK 安裝在新 Android 系統上,其行為還是保持老的系統上的行為,這樣就保證了系統對老應用的前向兼容性。

這里還是用原文的例子,在 Android 4.4 (API 19)以后,AlarmManager 的 set() 和 setRepeat() 這兩個 API 的行為發生了變化。在 Android 4.4 以前,這兩個 API 設置的都是精確的時間,系統能保證在 API 設置的時間點上喚醒 Alarm。因為省電原因 Android 4.4 系統實現了 AlarmManager 的對齊喚醒,這兩個 API 設置喚醒的時間,系統都對待成不精確的時間,系統只能保證在你設置的時間點之后某個時間喚醒。

這時,雖然 API 沒有任何變化,但是實際上 API 的行為卻發生了變化,如果老的 APK 中使用了此 API,并且在應用中的行為非常依賴 AlarmManager 在精確的時間喚醒,例如鬧鐘應用。如果 Android 系統不能保證兼容,老的 APK 安裝在新的系統上,就會出現問題。

Android 系統是怎么保證這種兼容性的呢?這時候 targetSdkVersion 就起作用了。APK 在調用系統 AlarmManager 的 set() 或者 setRepeat() 的時候,系統首先會查一下調用的 APK 的 targetSdkVersion 信息,如果小于 19,就還是按照老的行為,即精確設置喚醒時間,否者執行新的行為。

我們來看一下 Android 4.4 上 AlarmManger 的一部分源代碼:

private final boolean mAlwaysExact; AlarmManager(IAlarmManager service, Context ctx) { mService = service;final int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;mAlwaysExact = (sdkVersion < Build.VERSION_CODES.KITKAT); }

看到這里,首選獲取應用的 targetSdkVersion,判斷是否是小于 Build.VERSION_CODES.KITKAT (即 API Level 19),來設置 mAlwaysExact 變量,表示是否使用精確時間模式。

public static final long WINDOW_EXACT = 0; public static final long WINDOW_HEURISTIC = -1;private long legacyExactLength() { return (mAlwaysExact ? WINDOW_EXACT : WINDOW_HEURISTIC); }public void set(int type, long triggerAtMillis, PendingIntent operation) { setImpl(type, triggerAtMillis, legacyExactLength(), 0, operation, null); }

這里看到,直接影響到 set() 方法給 setImpl() 傳入不同的參數,從而影響到了 set() 的執行行為。具體的實現在 AlarmManagerService.java,這里就不往下深究了。

看到這里,發現其實 Android 的 targetSdkVersion 并沒有什么特別的,系統使用它也非常直接,甚至很“粗糙”。僅僅是用過下面的 API 來獲取 targetSdkVersion,來判斷是否執行哪種行為:

getApplicationInfo().targetSdkVersion;

所以,我們可以猜測到,如果 Android 系統升級,發生這種兼容行為的變化時,一般都會在原來的保存新舊兩種邏輯,并通過 if-else 方法來判斷執行哪種邏輯。果然,在源碼中搜索,我們會發現不少類似 getApplicationInfo().targetSdkVersion < Buid.XXXX 這樣的代碼,相對于浩瀚的 Android 源碼量來說,這些還是相對較少了。其實原則上,這種會導致兼容性問題的修改還是越少越好,所以每次發布新的 Android 版本的時候,Android 開發者網站都會列出做了哪些改變,在這里,開發者需要特別注意。

最后,我們也可以理解原文中說的那句話的含義,明白了為什么修改了 APK 的 targetSdkVersion 行為會發生變化,也明白了為什么修改 targetSdkVersion 需要做完整的測試了。

寫完這篇文章,再回頭去看一下原文的 targetSdkVersion 那一段,發現作者是說的多么“滴水不漏”。

總結

以上是生活随笔為你收集整理的Android targetSdkVersion详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人精品亚洲日本在线观看 | 免费成人在线视频观看 | 欧美 日韩 人妻 高清 中文 | 毛片网站免费 | 精品中文字幕在线播放 | 日韩在线色| 超碰在线cao| 极品尤物一区二区 | 久久国产精品久久 | 一区二区三区资源 | 另一种灿烂生活 | 国产精品无码天天爽视频 | www久久久 | 国产色婷婷一区二区三区竹菊影视 | 91偷拍精品一区二区三区 | 超碰人人射 | 最新中文字幕第一页 | 精品动漫一区二区三区的观看方式 | 国产我不卡 | 91丨九色丨国产 | 偷自拍 | 成人av高清| 最新激情网站 | 亚洲综合网站 | 91xxx在线观看 | 国产精品亚洲一区二区无码 | 在线香蕉视频 | 婷婷午夜精品久久久久久性色av | 日韩精品成人av | 中文字幕码精品视频网站 | 特级西西人体444www | 人妻内射一区二区在线视频 | 成人福利小视频 | 国产一区二区三区四区五区六区 | 91中文视频 | 欧美一区二区三区 | 久久久久久国产精品免费免费 | 激情超碰在线 | 成人av影院 | 五月天色小说 | 超碰免费在线播放 | 免费成人黄色 | 丝袜综合网 | 久久久久久穴 | 一区亚洲| 国产专区一区 | 国产奶头好大揉着好爽视频 | 天堂一区在线 | 中文字幕第一区 | 麻豆视频在线播放 | 亚洲色图10p | 欧美视频精品 | 日韩精品一区二区三区无码专区 | 大地资源二中文在线影视免费观看 | 在线观看的毛片 | 亚洲欧美日韩一区二区 | 在线观看污| 粗了大了 整进去好爽视频 日本女优中文字幕 | 污版视频在线观看 | 国产精品扒开腿做爽爽爽男男 | 久热网站 | 男人资源站 | 国产一卡二卡在线播放 | 女人天堂网 | 日韩资源在线观看 | 久久久无码18禁高潮喷水 | 91好色先生tv | 国产成人精品一区二区三区福利 | 天天cao在线| 国产午夜毛片 | 日韩有码一区二区三区 | 神马午夜场 | 西川结衣在线观看 | 日本电影一区二区三区 | 国内免费av | 亚洲砖区区免费 | 久久一区二区视频 | 久久噜噜噜精品国产亚洲综合 | 色伊人 | 视频在线免费观看 | 亚洲国产午夜 | 国产涩涩 | 国产毛片91| 一级黄色免费 | 久久久激情视频 | 人与嘼交av免费 | aaa大片十八岁禁止 中文字幕亚洲在线观看 | 久久国产精品网 | 成人午夜影视在线观看 | 99久久精品日本一区二区免费 | 欧美特黄视频 | 久一国产| 欧美整片在线观看 | 欧美s码亚洲码精品m码 | 欧美老肥熟| 成人在线播放网站 | 九九免费视频 | 国产成人一区二区三区电影 | 欧美老熟妇xb水多毛多 |