Android N 新特性 + APP開發注意事項

1. 多窗口MultiWindowandroid

        多窗口MultiWindow,這是Android N裏對開發者影響比較大的特性,也是你們疑問比較多的地方。站在開發者的角度其實沒必要太擔憂這個特性會致使咱們須要修改不少代碼來適配系統。Google的工程師們也不但願這個特性致使不少應用出現問題,他們更但願的是讓應用都能無縫過分到Android N。據他們測試,目前Google市場中Top 200的應用只有極少數會出如今Android N上由於多窗口致使不能正常使用的狀況。退一步講,即便你的應用在Android N的多窗口模式下不能正常運行,能夠在manifest中設置resizeableActivity爲false,便可禁用多窗口模式,固然在Android N上這個值默認是true.網絡

        應用如要支持多窗口,也有一些須要注意的地方,最主要的是分辨率的適配。在多窗口模式下,應用的顯示比例不必定是手機屏幕的比例。這裏可能會影響到一些代碼,好比有的應用一啓動就全局存儲屏幕的寬高,這在Android N下可能就有問題了,須要開發者作相應的修改。多窗口帶來的另一個問題是對onStart()和onStop()的處理,在多窗口模式下,Activity的生命週期是不受影響的。可是原來進入onStop()後Activity就不可見了,在Android N中卻仍是可見的,這一點在開發的時候須要考慮到。對於音視頻的應用,應該把中止聲音播放的代碼從onPause()移到onStop()裏,在onPause()的時候,因爲整個應用對用戶仍然可見,音視頻播放不該該暫停。工具

        另外值得一提的是畫中畫功能,畫中畫按照Google工程師的說法是專門爲Android TV設計的。畫中畫可使一個Activity在播放視頻的同時,在另一箇中Activity進行其它操做。由於不少視頻應用都須要作小窗播放的功能,目前的作法基本都是用Window Manager實現一個全局浮窗實現的。爲此我和另一個視頻應用的開發者向他們反饋其實在非Android TV平臺也很須要這個功能,Window Manager自身也有許多缺點,好比OEM廠商會加入人爲的限制,致使浮窗彈不出來,WindowManager只能加入最頂層的RootView。Google工程師回覆使用這種方式實現畫中畫功能實際上是對系統的一種Hack,即並不是標準的手段,而畫中畫功能能夠提供比較清晰的API,而且他們認爲咱們提的這點確實是一個問題,他們會把這點反饋到開發團隊。測試

 

2. 對Notification的改進優化

  1. 通知消息分組:比較好理解,同一個組的消息在UI展現上歸類到一塊兒;spa

  2. 添加快速回復功能:通知在預覽的時候能夠直接回復,系統通知欄提供了一個簡單的輸入區域;設計

  3. 能夠選擇是否隱藏時間:以前的通知欄都是帶時間的,如今可由App本身控制是否須要展示通知消息右下角的時間。日誌

 

3. 省電相關 - Doze和後臺任務優化視頻

        先說後臺任務優化,不知道你們在開發中沒有本身去接收過ConnectivityManager這個系統服務的connectivity_change廣播,這個廣播是用的最普遍的,同時也是最容易被濫用的。若是應用中沒有設計一個統一的地方接收系統廣播而後在應用內分發,在單個應用內就會有多個監聽的狀況。因爲是系統廣播,若是用戶打開的App較多,網絡發生變化時,系統要喚起App來執行一段代碼。可是這時候應用其實不可見的,這裏浪費了較多的電量。blog

        相似的場景還有不少,好比使用系統相機拍照後系統會發出NEW_VIDEO或者NEW_PHOTO的廣播,若是你的應用如今處於後臺,那麼接收此類廣播實際上是無心義的,只會浪費電量而已。

        在Android N中,這類廣播被取消了!實際上全部的隱式廣播(Implicit Broadcast)未來都會逐步取消,在Android N中會先從上文提到的幾個廣播開始。取而代之的是JobScheduler,JobScheduler是你們把本身關注的事件和對應的操做註冊進來,系統會按優先級去調用。若是你的應用在前臺,那麼你的任務會被運行,若是是後臺,那麼系統就不會跑你的代碼了。這裏說的比較通俗,實際系統會制定必定的策略來評估此類狀況,更多關於這類廣播的信息,能夠查看Google的官方說明。

        再說說Doze,Doze在Android N上是老樹開新花,由於Doze在Android M上就已經有了。Android M上,在系統屏幕關閉且靜止不動一段時間後,手機會進入Doze模式,只有極少數服務如GCM和加入了白名單的服務,能夠保持運行,其它服務,每隔9分鐘會有一個時間窗來執行代碼。舉個例子,若是你是一個鬧鈴應用,在不加入白名單的狀況下。10:00進入Doze模式,若是鬧鐘設置在10:09,那麼能夠響,若是在10:08,對不起,鬧鐘就不能響了。在Android文檔上提到能夠用如下方式來申請Alarm不被Doze凍結,不過估計要系統簽名的App纔會生效,普通App應該是沒用的。


        注意,在Android M上Doze的觸發條件是關屏且靜止一段時間。在Android N上把Doze的應用範圍擴大了,只要關屏就進入Doze模式,據Google工程師測試這樣能夠節省電量30%,這個改動對須要在後臺作大量工做的應用影響不小。官方給出的解決方案是走Google官方的GCM通道,這個服務有特權不受Doze的影響,但在目前國內環境下這個方案用不了。Google的人說他們會推OEM廠商推出相似GCM的方案。App側能作的就是提示用戶把應用加入白名單,這個方案的成本很高。預計OEM廠商會提供相似手電筒那樣的快捷開關,在須要的時候能夠把Doze很方便的關閉掉。

        Google還開發了battery-historian工具,能夠根據系統生成的bug report,分析出詳盡的耗電狀況,測試同窗又多了一個利器。

        現場的效果圖,用此工具分析進入Doze模式後,電量消耗立刻變慢了(黑色曲線)。

 

 

4. 運行時權限

        這個功能並不陌生,國內OEM的系統不少已經作了此功能。Android N此次加上去的是SD卡中內容的權限提示。好比你只須要訪問某一個特定的文件夾,在此以前你要申請整個SD卡的讀/寫權限,據統計會有20%的用戶會所以放棄安裝你的App. Android N以後,你能夠在App運行的過程當中申請針對某一個目錄的權限。在提問環節,有同窗提出只是爲了獲取IMEI,Android對這個權限的提醒是讀取手機的狀態,這個權限提醒的太嚇人,Google工程師說會把這個意見反饋上去,不過看樣子大機率不會修改這裏。

 

5. NDK的改動

    1. NDK的編譯也要拋棄Makefile轉而採用Gradle;

    2. NDK受限API採用更改Namespace的方式限制第三方調用,調用受限API會致使應用Crash.

 

 

參考文章:

北京Android N開發者會議見聞
http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=2649796776&idx=1&sn=dc8e2d345b840ae4ec7b71c0bc775ea3&scene=1&srcid=0628FJySPxU8aDC3Ql8VspRR#wechat_redirect

 

如何適配適配 Android N
http://www.trinea.cn/android/android-n-adaptation/

 

 

支持系統級分屏功能:Android_7.0系統更新日誌一覽 - 新聞資訊 - 安卓中國http://www.anzhuo.cn/news/p_13924

相關文章
相關標籤/搜索