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

1. 多窗口MultiWindow

????????多窗口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展示上歸類到一起;

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

  3. 可以選擇是否隱藏時間:之前的通知欄都是帶時間的,現在可由App自己控制是否需要展現通知消息右下角的時間。

?

3. 省電相關 - Doze和后臺任務優化

? ? ? ? 先說后臺任務優化,不知道大家在開發中沒有自己去接收過ConnectivityManager這個系統服務的connectivity_change廣播,這個廣播是用的最廣泛的,同時也是最容易被濫用的。如果應用中沒有設計一個統一的地方接收系統廣播然后在應用內分發,在單個應用內就會有多個監聽的情況。由于是系統廣播,如果用戶打開的App較多,網絡發生變化時,系統要喚起App來執行一段代碼。但是這時候應用其實不可見的,這里浪費了較多的電量。

????????類似的場景還有很多,比如使用系統相機拍照后系統會發出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

?

轉載于:https://www.cnblogs.com/bluestorm/p/5684150.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374339.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言開發筆記(六)實參和形參

舉例說明 #include <stdio.h>void swap(int x, int y) {int temp 0;temp x;x y;y temp; }int main(void) {int a 1, b 2;swap(a, b);printf("a%d, b%d\n", a, b);return 0; }結果為 在函數調用時&#xff0c;a的值傳給x&#xff0c;b的值傳給y。執行完…

Spring Singleton,請求,會話Bean和線程安全

由眾多有用框架組成的Spring框架生態系統已成為許多Java EE應用程序的基礎。 但是在所有Spring產品的核心中&#xff0c;我們仍然擁有Spring DI / IOC框架&#xff0c;該框架將Spring推向了新的高度。 隨著越來越多的人將Spring MVC或JSF-Spring集成用于他們的應用程序&#xf…

some fragments

1.fullpage 2.one page.js 3.scrollReveal.js 4.wow.js 5.瀏覽器前綴&#xff1a; -webkit- &#xff1a; Safari&#xff0c;Chrome -o- &#xff1a; Opera -moz- &#xff1a; Firefox -ms- &#xff1a; IE   6.css3過渡動畫&#xff1a;transitio…

面試之ajax原理(轉載)

總結1 總結2 AJAX全稱為“Asynchronous JavaScript and XML”&#xff08;異步JavaScript和XML&#xff09;&#xff0c;是一種創建交互式網頁應用的網頁開發技術&#xff0c; 是幾種原有技術的結合體。它由下列技術組合而成。 1.使用CSS和XHTML來表示。 2. 使用DOM模型來交互和…

優化方案電子版_關于小區分支道路整修設計方案的討論稿(No.2020121)

各位業主&#xff0c;大家好&#xff01; 關于綠洲比華利花園主干道翻新和次干道整修前期勘查和設計方案&#xff0c;經業委會及小區專家小組、設計單位申都設計公司工程設計人員結合本小區的實際情況進行了深入討論&#xff0c;優化設計&#xff0c;形成如下三個獨立方案&…

OSGI和Spring動態模塊–簡單的Hello World

在此姿勢中&#xff0c;我們將采用使用OSGi進行的第一個實現&#xff0c;并使用Spring Dynamic Modules改進應用程序。 Spring動態模塊&#xff08;Spring Dm&#xff09;使基于OSGi的應用程序的開發更加容易。 這樣&#xff0c;服務的部署就容易得多。 您可以像其他任何Spring…

C語言代碼規范(五)函數參數個數

一個函數的參數的數目過多&#xff08;尤其是超過8個&#xff09;顯然是一種不可取的編程風格。參數的數目直接影響調用函數的速度&#xff0c;參數越多&#xff0c;調用函數越慢。 參數的數目少&#xff0c;程序就顯得精練、簡潔&#xff0c;這有助于檢查和發現程序中的錯誤。…

vijos P1740 聰明的質檢員

題目鏈接:傳送門 題目大意:給你n個物品&#xff0c;每件物品有重量 W 和價值 V&#xff0c;給m個區間&#xff0c;和一個標準值。(n,m最大200000) 要求找到一個值x&#xff0c;使得m個所有區間的權值和與標準值的差的絕對值最小。單個區間權值計算公式(數目num0&#xff0c;價值…

為什么有的開關電源需要加自舉電容?

一、什么是自舉電路&#xff1f; 1.1 自舉的概念 首先&#xff0c;自舉電路也叫升壓電路&#xff0c;是利用自舉升壓二極管&#xff0c;自舉升壓電容等電子元件&#xff0c;使電容放電電壓和電源電壓疊加&#xff0c;從而使電壓升高。有的電路升高的電壓能達到數倍電源電壓。…

VS2010報錯 error:LINK1123:轉換到COF期間失敗,文件無限或損壞

右鍵工程-配置屬性-清單工具-輸入和輸出&#xff0c;嵌入清單一項重新選擇為否&#xff0c;如下圖 修改后重新生成和運行&#xff0c;發現程序正常運行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末視頻講解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

iOS 開發中遇到的問題

1. 關于糾結很久的KVO崩潰問題&#xff0c;其真正原因是&#xff0c;在刪除roomItem的KVO之前,將這個對象已經賦值為nil,所以實際上并沒有刪除他的observer&#xff0c;因此而崩潰&#xff1b;長時間糾結的原因是受.cxx_destruct影響了思路 2.拷貝block 因為block變量默認是聲明…

為舊版代碼創建存根–測試技術6

任何閱讀此博客的人都可能已經意識到&#xff0c;目前我正在開發一個包含大量舊代碼的項目&#xff0c;這些舊代碼龐大&#xff0c;擴展且編寫時從未進行過任何測試。 在使用此遺留代碼時&#xff0c;有一個行為異常的類非常普遍&#xff0c;整個團隊都一次又一次地犯錯。 為了…

C學習雜記(一)常見誤會

一、sizeof是關鍵字&#xff0c;不是函數。 二、strlen是函數。

python性能解決_我們如何發現并解決Python代碼中性能下降的問題

Python部落(python.freelycode.com)組織翻譯&#xff0c;禁止轉載&#xff0c;歡迎轉發。 作者&#xff1a;Omer Lachish 最近&#xff0c;我們已經開始使用RQ庫代替Celery庫作為我們的任務運行引擎。第一階段&#xff0c;我們只遷移了那些不直接進行查詢工作的任務。這些任務包…

easyui $.parser.parse 頁面重新渲染

一些dom元素是動態拼接上的easui的樣式&#xff0c;由于頁面已經渲染過了&#xff0c;所以需要手動執行渲染某個部件或者整個頁面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…

Java EE6裝飾器:在注入時裝飾類

軟件中常見的設計模式是裝飾器模式 。 我們上一堂課&#xff0c;然后在它周圍包裝另一堂課。 這樣&#xff0c;當我們調用類時&#xff0c;我們總是在到達內部類之前經過周圍的類。 Java EE 6允許我們通過CDI創建裝飾器&#xff0c;作為其AOP功能的一部分。 如果我們想實現仍然…

C語言代碼規范(六)浮點型變量邏輯比較

無論是float還是double類型的變量&#xff0c;都有精度限制。所以一定要避免將浮點變量用""或"!"與數字比較&#xff0c;應該設法轉化成為">"或"<"形式。 不建議使用的例子&#xff1a; if(0.0 x) if(0.0 ! x) 強烈推薦的例…

圖靈機器人調用數據恢復_機器人也能撩妹?python程序員自制微信機器人,替他俘獲女神芳心...

機器人也有感情還記得王傳君飾演的《星語心愿之再愛》這部電影嗎&#xff1f;王傳君飾演的天才程序員“王鵬鵬”因工作原因不能陪伴照顧身在異地的女朋友“林亦男”&#xff0c;呆萌宅男“王鵬鵬”開發出一款以自己為原型的“王鵬鵬8.0”程序去陪伴異地戀的女友&#xff0c;后來…

Spark排錯與優化

一. 運維 1. Master掛掉,standby重啟也失效 Master默認使用512M內存&#xff0c;當集群中運行的任務特別多時&#xff0c;就會掛掉&#xff0c;原因是master會讀取每個task的event log日志去生成spark ui&#xff0c;內存不足自然會OOM&#xff0c;可以在master的運行日志中看到…