談一談 Android L 的 API 變化
每次Android新版的發(fā)布,Google都會發(fā)布一個API變更報(bào)告,概括出對比前一個版本增加、改變、移除的API等信息。
無論如何,Android L 開發(fā)者預(yù)覽版差異報(bào)告已經(jīng)隨著javaDoc一起發(fā)布了,在(a poorly-structured ZIP archive)可以看到。我經(jīng)?;仡欉@份資料,想看看這和Google I/O上呈現(xiàn)出的有多大差別。Android L 其實(shí)有不少很有意義的改變。
注意:這份分析是基于Android L 的開發(fā)預(yù)覽版,也許在“L”發(fā)布之前很有可能這里說的一些東西會回到上一版本中,成為Android 5.0的一部分(而且叫什么名稱也還不知道)。還有,雖然本文只展示一些我們關(guān)心的領(lǐng)域,但是強(qiáng)烈建議讀者還是好好去看看實(shí)際發(fā)布的版本。
注意2:在Android上,“deprecated”(不推薦)指的是我們認(rèn)為還有更好的方案可以使用。這里不能保證以后一定會一直支持這個部分,但是至少現(xiàn)在還是可以使用的。
關(guān)于注意事項(xiàng),下面黑體字說明了版本變更情況:
-
Action Bar 導(dǎo)航:對于所有格式來說,都不建議使用了。這里就包括了Action Bar Tabs和下拉導(dǎo)航。我也在想如果限制了Action Bar tabs上面的各種操作的話,會怎么樣呢?
-
還有部分理由是Action Bar在開發(fā)中已經(jīng)被另一種更容易操作的組件替代。Activity中有一個setActionBar()方法,需要一個Toolbar參數(shù)。 Toolbar就像一個簡化版的ActionBar一樣,可以放在視圖結(jié)構(gòu)的任何一個地方,相比只能鎖定在頂部的ActionBar來說好多了。
-
Activities也可以“持久化”,還可以跨過重啟。我想這點(diǎn)大概是為了對近期推出的一些功能的擴(kuò)展吧,而副作用就是需要對 onSaveInstanceState()方法有新的認(rèn)識,在Activity上我們需要操作Bundle和一個叫PersistableBundle 的東西,也許就是這個東西可以挽救系統(tǒng)重啟帶來的災(zāi)難。
-
在ActivityManager中的getRecentTasks()和getRunningTasks()現(xiàn)在也不建議使用了,在Android L或者更高版本中會返回一個結(jié)果的子集。
-
BatterryManager現(xiàn)在可以直接獲取電量信息了,而不用為ACTION_BATTERY_CHANGED注冊一個null類型的receiver。
-
bindService()方法現(xiàn)在需要傳入一個明確的Intent對象,如果你的目標(biāo)sdk版本設(shè)置為L版本或者更高的話,建議使用隱式的Intent,以保證代碼可讀性,而如果你在服務(wù)中使用的話,要注意一下。據(jù)Alex Curran說,這會對IAP(in-ap pruchasing)的代碼集成有影響。
-
現(xiàn)在我們可以使用getExternalMediaDirs()方法,和getExternalFileDirs()方法類似,但是此方法可以被MediaStore掃描到。
-
在DevicePolicyManager中已經(jīng)加入了很多新的功能,可以更多地使用一些高級的API。
-
FragmentBreadCrumbs目前也不建議使用了。使用這個類的朋友們,為你們默哀。
-
還有這里新加了一個啟動器,幫助更容易找到相關(guān)的應(yīng)用,不過這也和系統(tǒng)的配置有關(guān)(如果沒設(shè)置成默認(rèn)啟動器的話,那是不行的)。
-
MediaStore新增了MediaStore.Audio.Radio,它還沒有正式的文檔資料,所以對于流媒體廣播電臺,傳統(tǒng)的廣播電臺或者其它的來說,也會很不明確。
-
在所有模式中,TOP_LEVEL_*這樣的模式已經(jīng)不建議使用了。也許這也反映出了頂級域名的數(shù)量也在不斷增加。
-
Android上現(xiàn)在有很多關(guān)于探測“省電模式”的一些工具,在PowerManager上使用isPowerSaveMode()方法再加上一個 ACTION_POWER_SAVE_MODE_CHANGED廣播就可以了。至于是否是在OEM直接納入還是在系統(tǒng)框架中集成,那我就不好說了。
-
最開始要做的事,像“undeprecated”這樣的字眼,十分明確地指出了在設(shè)置時候出現(xiàn)INSTALL_NON_MARKET_APPS,由于安全問題,它已經(jīng)從設(shè)置選項(xiàng)中移回到了這里,變成全局的。
-
web設(shè)置現(xiàn)在可以控制內(nèi)容混合模式,可以控制webview是否從安全的來源中加載不安全的內(nèi)容。
最后,其實(shí)Android L 中還有很多變化,尤其是一些大的變更。但是我比較重視的就只有這些。如果讀者有興趣,請自行閱讀本文沒有提到的一些內(nèi)容。