Android 5.0新的特性對開發者會有什麼影響?
相比較android4.0及以上至android L有何突出改變和優化?作為一名從業者,該如何重構現有的代碼來更好的吸納5.0新的規範特性?以及android5.0到來會給android平台的從業者帶來怎樣的挑戰和提升?對現有的移動終端市場會有怎樣的衝擊?提問如有不恰當之處還請諒解。
如果target到API 21,有一些注意的事項,以下是目前我發現的兩個問題
1. Service must be explitict,從Lollipop開始,service必須顯性聲明,解決方案:http://blog.android-develop.com/2014/10/android-l-api-21-javalangillegalargumen.html源代碼參考`sdk/sources/android-21/android/app/ContextImpl.java` private void validateServiceIntent(Intent service) {
if (service.getComponent() == null service.getPackage() == null) {
if (getApplicationInfo().targetSdkVersion &>= Build.VERSION_CODES.LOLLIPOP) {
IllegalArgumentException ex = new IllegalArgumentException(
"Service Intent must be explicit: " + service);
throw ex;
} else {
Log.w(TAG, "Implicit intents with startService are not safe: " + service
+ " " + Debug.getCallers(2, 3));
}
}
}
2. Material Design 按鈕文字默認大寫,相關鏈接:https://code.google.com/p/android-developer-preview/issues/detail?id=487,奇怪吧,看看源代碼就知道
&
3. 補充一點, 謝謝@King Sing提供。 JobScheduler 是可以通過System serviceContext.getSystemService(Context.JOB_SCHEDULER_SERVICE)來獲得的,它不依賴於implicit service或者是explicit service,但explicit service是可以與JobScheduler交互,參考sample,https://github.com/googlesamples/-JobScheduler。 在app中聲明的explicit service,用電是在app頭上,所以使用者看到的結果是android os 耗電不會很高,取而代之是各種app在耗電list裹。
4. Material Design Action Bar 默認是有shadow的,是因為新的elevation API, 所以你想去除它,要買在action bar style 的xml中,定義elevation 屬性為0,要麼 getActionBar().setElevation(0)
或許在真正懂安卓的人眼裡,簡潔,流暢,直觀,輕盈,才是好看的app。QAQ
我說幾點我確定的,Android Lollipop來了以後立刻影響到我正在開發的功能
1. FlashLight按照以前的介面是不能用了,注意是不能用了,所以一定要做版本適配,Lollipop上把Camera直接杠掉,從新弄了一套Camera2,詳情可以去看Lollipop狀態欄閃光燈開關的源碼
https://android.googlesource.com/platform/frameworks/base/+/android-5.0.0_r2/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java2. ActivityManger中通過getRunningTask獲取當前列表也是禁用了,這個是代碼上注釋的描述
@deprecated As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method is no longer available to third party applications: the introduction of document-centric recents means it can leak person information to the caller. For backwards compatibility, it will still return a small subset of its data: at least the caller"s own tasks, and possibly some other tasks such as home that are known to not be sensitive.
這就禁止後我就無法獲取到當前運行的packageName了,也就沒法進行一些涉及到需求的判斷了。目前我還沒找到很好的解決方案,涉及到系統設計的問題,可能只能從產品上去改進了
3. 終於支持Vector圖片了,還是SVG標準的,媽媽再也不用擔心疊加的相框失真了,請戳
Working with Drawables4. Material Design 所有人都在說了,官方文檔也有,可以自己查
樓上@張之光 是調侃我知道,但是我不太認可,騰訊百度360這些公司,對新系統的預研還是很給力,這是我在把我的產品和他們做產品對比的時候發現的(當然可能是我太弱了&>.&<)
利益相關:Android手機安全方向研發者getRunningTasks()方法在API 21後不再提供支持,第三方APP需要使用該方法的,需要找到替代方案。
---------------------------------------------------------------------------------------------------------------------------------------
新一期的版本升級的工作開始了,追加一些看法。對於HSV廠商,Android升級時他們需要做的第一步是移植代碼,就是在AOSP代碼中上加入廠商自己的代碼。所以分析系統版本更替的代碼差異,很重要也很必要。這是估算移植代碼的量度和難度以及可能引發Bug的必要環節。
移植工作的對象又分為系統層的和APP層的。APP層又分為AOSP的APP,運營商定製的APP以及HSV廠商的APP。版本升級對於系統層和APP層的均有不同程度的影響,簡單說幾個自己了解的方面。
Material Design。
Google推出了這麼逼格的設計語言,各路廠商肯定不會掉隊。這就需要廠商們設計新的UI,包括新的配色,新的動畫新的圖片等。這樣能在保持Material風格的前提上加入廠商自己的界面特色。多用戶功能。
對於一些安全性隱私性比較高的APP會有很大的影響,如密碼保存APP,照片隱藏APP等。這些APP需要針對多用戶功能進行支持,可能需要更多的資料庫文件,更複雜的用戶管理展示的功能。ART運行環境。
這個改變對於廠商和第三方開發者的影響都是很大的。這需要將更種層面的APP進行反覆的運行,測試ART和系統及APP之間的磨合,並且需要修改系統層和APP層,使之兼容。我們測試了不少APP,發現有的APP一運行就閃退。這就得調查和修改,不然ART更快更強的特性就是扯淡。除此之外,因為ART是採用AOT編譯機制的,APP安裝後的空間會變得大得多,安裝的時間也長得多,對於用戶的影響也應該考慮到。鎖屏通知
5.0的鎖屏界面里收到通知的話,默認是在主界面展示的,類似iOS的消息條。使用setVisibility()方法可以實現這個功能。另外一個小的細節。5.0中bindService的式樣變了。以前綁定Service,無論是隱式Intent方法還是顯式Intent方法都是可以的。5.0中隱式Intent方法bindService的方法將會拋出異常。
目前只知道這麼多,日後可再行追加。
以上。
--------------------------------------------------------------------------------------------
Android 4.4至5.0,發生了重大改動。從代碼層面看:
API 20-21:總共涉及2824處改動,代碼差異為6.51%;API 18-19:總共涉及1031處改動,代碼差異為2.63%;5.0的差異足足是4.4版本改動的兩倍多。。。從功能方面看:
ART運行環境的轉移,通知欄的界面變化,鎖屏欄的消息提醒,
APP使用數據的獲取,輸入法切換的改動,OpenGL ES 3.1的支持等等。無論是內部代碼的改動,還是外部展示的功能變化。5.0變化巨大,版本升級任務艱巨。個人開發者:卧槽,真不賴,我已經準備好開發新版本了.
大公司APP團隊:你妹,又得加班~
騰訊:5.0? Material Design?那是什麼?能吃么"又要多適配一個版本.."
如果用Toolbar替代ActionBar,注意觸發ActionMode還是會拉出一條ActionBar,可以在Activity觸發ActionMode的方法內對Toolbar進行gone
那個水波紋RippleDrawable依賴View新的api來獲取觸摸的x,y坐標,移植到4.x上面也沒啥意義。增加了很多東西需要去熟悉;刪除了很多東西,需要找替代方案。
補充一個target api改成21之後,notification的適配。smallIcon要換成灰度圖片,否則系統setColoFilter之後你的圖片就是一坨白色。詳見官方Notification guide章節。如果自定義通知布局要記得字體樣式的主題改成了TextAppearence.Material.Title?憑印象的,大概是這個?
Android側Framworks框架的通信層改動很大,這會讓終端廠商的升級需要一定的時間的穩定,即原來自己廠商的做上去的優化與功能,可能要調整一下,時間無需太長。
推薦閱讀:
※有哪款智能手機適合手部活動不便的人使用?
※第三方後台程序管理 App 對安卓機是否有重要作用?Google 是否應當對此感到羞愧?
※在沒有eclipse的時候用什麼IDE開發的?
※如果安卓APP開發者都很自律,那安卓系統會不會非常流暢?
※大家討論下Android程序員未來十年的發展方向?