您好,登錄后才能下訂單哦!
譯自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0-changes.html —— By NashLegend
原譯文在Github上:https://github.com/NashLegend/ProjectBabel/blob/master/Android%205.0%20Changes.md
前排渣翻譯預警,如果你能提供更好更專業的翻譯或者提出修改意見就好了……
另外本篇只對Android 5.0特性作了說明,至于對應的API方面的變化,參考下一篇:Android 5.0 API的變化
除了新增特性和功能之外,Android 5.0還包含了一系列的變化,包括API變化、行為變化,系統增強以及bug修復。這篇文檔將重點闡述一些你應該知道并應用到你的app里面的關鍵的變化。
如果你之前已經發布過一個Android app,請注意您的app有可能會受到Android 5.0的這些新變化的影響。
如果想看一些新平臺的更高級的特性,請看這里
在Android 5.0中,ART運行時取代Dalvik成為默認運行環境,ART于Android 4.4時代作為試驗特性引入
如果想看ART的新特性概述,請看這里,幾個主要的特性如下:
提前編譯(AOT)
增強的垃圾回收
增強的debug支持
多數Android應用地ART模式下運行是沒有問題的,但是有些情況下卻不能。要查看適配ART的注意事項,請看這里,尤其要注意的是下面的情況:
你的app使用了JNI來運行C/C++代碼
你使用了產生非標準代碼的(比如一些代碼混淆工具)
你使用了不兼容compacting garbage collection的技術
請確保你的通知將Android 5.0的最新變化考慮了進來,要獲知更多如何為Android 5.0以及更高版本系統設計你的通知的信息,請看這里
通知使用深色文字以及白色(或者很淺色)的背景以適配material design樣式的桌面插件。請確保你的所有通知樣式統一,如果你的通知看起來有問題,請修正它們:
使用 setColor()設置通知圖標的背景(基準)色。
修改或者移除包含顏色的資源。系統在action icons和通知欄圖標中了忽略所有非透明通道。你應該認為這些圖標只有alpha通道。系統會把通知圖標繪制到白色背景,把action icons繪制到深灰色背景。
如果你現在在通知里通過Ringtone, MediaPlayer, or Vibrator 類添加了聲音和震動,請移除這些代碼以便系統能夠在優先模式
下正確的播放通知聲和震動。你應該使用Notification.Builder方法添加聲音和震動才對。
將設備設置為靜音模式將使設備進入優先模式
。如果你將設備設置為普通模式或者震動模式,設備將退出這種優先模式
。
(注:優先模式指僅對于高優先級的通知播放通知聲和振動,靜音模式下自動開啟——靜音模式下仍然有聲音聽起來很煩人的樣子——另外也可以手動直接開啟)
以前Android使用STREAM_MUSIC作為master stream以控制平板設備的音量。在Android 5.0上,平板和手機設備的master volume stream已經統一了起來,由STREAM_RING 或者 STREAM_NOTIFICATION控制。
現在,默認情況下,通知將顯示在用戶的鎖屏界面上,用戶出于保護隱私可以選擇不展示這些信息,系統會使用其他提示來表示通知的文字內容,如果想自定義這些隱私化的文字,請使用setPublicVersion()方法
如果通知不包含私人信息或者你想要允許在通知上控制媒體,請調用 setVisibility()方法并獎通知的可見級別設置為VISIBILITY_PUBLIC
如果你使用展示和控制媒體播放的通知,請考慮使用最新的Notification.MediaStyle模版以取代自定義的RemoteViews.RemoteView對象,無論你使用哪種方法,確保通知的可見性為VISIBILITY_PUBLIC,這樣你可以在鎖屏界面進行控制。請注意,自Android 5.0以后,系統不會將RemoteControlClient對象展示在鎖屏界面上,要獲知更多信息,請查看如果你的app使用了RemoteControlClient(其實就在下面)
現在通知可以以一個懸浮小窗口的形式出現了,當然設備得是未鎖屏且點亮屏幕狀態。這些通知看起來像是你的通知的精簡版一樣,除了這些通知也可以使用action buttons。用戶可以在當前正在使用的app里面選擇執行也可以忽略通知動作而不必離開當前app。
下面是有可能觸發浮動通知的情況。
用戶的activity處于全屏狀態。
通知具有高優先級并且使用了鈴聲或者震動。
這種情況下就要使用浮動通知。
RemoteControlClient類現在已經廢棄,請盡快改用MediaSessionAPI.
Android 5.0的鎖屏界面并不會顯示你的MediaSession 或者 RemoteControlClient的控制界面。你的應用應該通過通知提供一個鎖屏界面的控制界面,這樣,在擁有鎖屏和未鎖屏狀態下的連貫的用戶體驗的同時給予你的應用更多對于媒體按鈕的控制權。
Android 5.0提供了一個新的Notification.MediaStyle模版以實現上述目的。你可以在Notification.Builder.addAction()為Notification.MediaStyle添加動作。通過setSettion()方法告訴系統這個通知控制一個媒體播放會話。
請確保將通知的可見性設置為VISIBILITY_PUBLIC以確保能顯示在通知界面。要查看更多信息,請看鎖屏界面通知。
如果你的app運行在Androdi TV或者可穿戴設備上,若要展示媒體控制,請使用MediaSession類,如果你的應用要接收Android設備的媒體按鈕事件的話,請使用MediaSession類。
隨著Android 5.0 concurrent documents and activities tasks特性的引入,ActivityManager.getRecentTasks()方法被廢棄以保護用戶隱私。為了后向兼容性,這個方法仍然后返回一小部分結果,比如調用此方法的應用的的task以及一些非敏感任務(比如桌面)。如果你的app使用這個方法獲得自身的task的話,請使用getAppTasks()
Android 5.0引入了64位支持,增加了尋址空間和系統表現的同時完美兼容現在的32位系統。64位支持同樣增強了OpenSSL的加密性能。此外,這個版本還增加了新的多媒體NDK API以及OpenGL ES3.1支持。
要使用64位支持,到這里下載NDK Revision 10c,查看這里以獲取更多此版NDK的信息。
Context.bindService()方法現在需要指定explicit Intent。如果implicit intent的話將拋出一個錯誤。為確保app安全性,請在啟動或者綁定service的時候使用explicit intent,不要為service定義intent filters。
Android 5.0 改變了app的默認行為。
如果你的系統target api為21以上:
系統默認禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。
The system now intelligently chooses portions of the HTML document to draw. This new default behavior helps to reduce memory footprint and increase performance. If you want to render the whole document at once, disable this optimization by calling enableSlowWholeDocumentDraw().
系統現在可以智能選擇HTML文檔的portion來繪制。這種新特性可以減少內存footprint并改進性能。若要一次性渲染整個HTML文檔,可以調用這個方法enableSlowWholeDocumentDraw()
**如果你的app的target api低于21: **系統允許mixed content和第三方cookie,并且總是一次性渲染整個HTML文檔。
如Permissions文檔所述,Android應用可以自定義permissions以限定調用某個組件的方式。應用在manifest文件中定義這此自定義permissions。
只有少數情況下我們才需要自定義permissions,很多情況下使用自定義permissions是沒有必要且容易引發潛在危險的,這取決于這些permossioms的保護級別。
Android系統同時引入了一種新特性以確保一個特定的自定義permissions只能被一個app定義,除非其他app有相同的簽名。
任何app都可以自定義任何permissions,所以有可能不同的app正好使用了重名的自定義permissions。比如兩個有相似功能的app就有可能這么干,或者App們可能會引入擁有相同的自定義權限的公共庫或者代碼示例。
在Android 4.4之前這樣做是沒有問題的。從Android 5.0開始,系統加入了不同簽名的應用的自定義權限必有具有唯一性的限制,如果用戶想要安裝一個擁有和某個已安裝app有相同自定義權限但是簽名不同的app,系統將禁止安裝。
Android 5.0以后,app仍然可以像以前一樣自定義permissions和通過請求其他app的權限。但是有了現在的限制之后,你應該認真考慮一下這些變化對你的app的影響。
下面幾點是你要考慮的:
你的應用是否在manifest聲明了元素。如果是的話,它們是否對于你的app或者service是必須的,或者,是否可以用系統默認permissions代替。
如果你使用了元素,你知道它們是哪里來的嗎。
你是否真的希望別人通過請求你的自定義權限。
你是否只是復制粘貼了別人的包含元素的代碼,這些permissions是否必須。
你的app是否使用了別人有可能使用的permissions名字。
安裝和升級軟件
如上所述,Android 5.0以后的設備對于哪些有相同自定義permissions卻沒有相同簽名的app是禁止安裝的(文檔真啰嗦,這里直接省了,具體看上面)
一些建議
在運行Android 5.0或者更高版本的設備上,我們建議您立即檢查、作出修改、發布新版……
如果你使用了你不必須的自定義permissions,刪除它們。
如果你的app必須使用自定義permissions的話,請修改它們以確保權限名的唯一性,比如可以以包名開頭。
如果你有一套的不同簽名的app使用一個自定義permissions以共用一個組件,請確保這個自定義permissions只被定義了一次。
如果你的一套app重命名相同,那么隨意,同名無所謂。
下面有一段TLS/SSL相關的,不懂就不翻譯了……
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。