1、當設備處于充電狀態且屏幕已關閉一定時間后,設備會進入低電耗模式并應用第一部分限制:關閉應用網絡訪問、推遲作業和同步。如果進入低電耗模式后設備處于靜止狀態達到一定時間,系統則會對 PowerManager.WakeLock、AlarmManager 鬧鈴、GPS 和 WLAN 掃描應用余下的低電耗模式限制。無論是應用部分還是全部低電耗模式限制,系統都會喚醒設備以提供簡短的維護時間窗口,在此窗口期間,應用程序可以訪問網絡并執行任何被推遲的作業/同步。
2、面向 Android 7.0 開發的應用不會收到CONNECTIVITY_ACTION廣播,即使它們已有清單條目來請求接受這些事件的通知。在前臺運行的應用如果使用BroadcastReceiver請求接收通知,則仍可以在主線程中偵聽CONNECTIVITY_CHANGE。
3、應用無法發送或接收ACTION_NEW_PICTURE或ACTION_NEW_VIDEO廣播。此項優化會影響所有應用,而不僅僅是面向 Android 7.0 的應用。
5、傳遞軟件包網域外的file://URI 可能給接收器留下無法訪問的路徑。因此,嘗試傳遞file://URI 會觸發FileUriExposedException。分享私有文件內容的推薦方法是使用FileProvider。
7、Android 7.0在“Welcome”屏幕中加入了“Vision Settings”,用戶可以在新設備上設置以下無障礙功能設置:Magnification gesture、Font size、Display size和話語提示。此項變更讓您可以更容易發現與不同屏幕設置有關的錯誤。要評估此功能的影響,您應在啟用這些設置的狀態下測試應用。您可以在Settings > Accessibility中找到這些設置。
8、從 Android 7.0 開始,系統將阻止應用動態鏈接非公開 NDK 庫,這種庫可能會導致您的應用崩潰。此行為變更旨在為跨平臺更新和不同設備提供統一的應用體驗。即使您的代碼可能不會鏈接私有庫,但您的應用中的第三方靜態庫可能會這么做。因此,所有開發者都應進行相應檢查,確保他們的應用不會在運行 Android 7.0 的設備上崩潰。如果您的應用使用原生代碼,則只能使用公開?NDK API。
9、所有應用在調用既非公開又不可暫時訪問的 API 時都會生成一個運行時錯誤。結果就是System.loadLibrary和dlopen(3)同時返回NULL,并可能導致您的應用崩潰。您應檢查應用代碼以移除對私有平臺 API 的使用,并使用預覽版設備或模擬器全面測試應用。如果您不確定您的應用是否使用私有庫,您可以檢查?logcat以識別運行時錯誤。
10、如果一個應用在 Android 7.0 上運行,但卻是針對更低 API 級別開發的,那么在用戶更改顯示尺寸時,系統將終止此應用進程。應用必須能夠妥善處理此情景。否則,當用戶從最近使用記錄中恢復運行應用時,應用將會出現崩潰現象。
11、您應測試應用以確保不會發生此行為。要進行此測試,您可以通過 DDMS 手動終止應用,以造成相同的崩潰現象。
12、在密度發生更改時,系統不會自動終止面向 N 及更高版本的應用;不過,這些應用仍可能對配置變更做出不良響應。
13、Android 7.0上的應用應能夠妥善處理配置變更,并且在后續啟動時不會出現崩潰現象。您可以通過更改字體大小 (Setting>Display>Font size) 并隨后從最近使用記錄中恢復運行應用,來驗證應用行為。
14、由于之前的 Android 版本中的一項錯誤,系統未能將對主線程上的一個 TCP 套接字的寫入操作舉報為違反嚴格模式。Android 7.0 修復了此錯誤。呈現出這種行為的應用現在會引發android.os.NetworkOnMainThreadException。一般情況下,我們不建議在主線程上執行網絡操作,因為這些操作通常會出現可能導致 ANR 和卡頓的高尾延遲。
15、Debug.startMethodTracing()方法系列現在默認在您的共享存儲空間上的軟件包特定目錄中存儲輸出,而非 SD 卡根目錄。這意味著應用不再需要請求WRITE_EXTERNAL_STORAGE權限來使用這些 API 。
16、許多平臺 API 現在開始檢查在Binder事務間發送的大負載,系統現在會將TransactionTooLargeExceptions作為RuntimeExceptions再次引發,而不再只是默默記錄或抑制它們。一個常見例子是在Activity.onSaveInstanceState()上存儲過多數據,導致ActivityThread.StopInfo在您的應用面向 Android 7.0 時引發RuntimeException。
17、如果應用向View發布Runnable任務,并且View未附加到窗口,系統會用View為Runnable任務排隊;在View附加到窗口之前,不會執行Runnable任務。此行為會修復以下錯誤:
18、如果一項應用是從并非預期窗口 UI 線程的其他線程發布到View,則Runnable可能會因此運行錯誤的線程。
19、如果Runnable任務是從并非環路線程的其他線程發布,則應用可能會曝光Runnable任務。
20、如果 Android 7.0 上一項有DELETE_PACKAGES權限的應用嘗試刪除一個軟件包,但另一項應用已經安裝了這個軟件包,則系統需要用戶進行確認。在這種情況下,應用在調用PackageInstaller.uninstall()時預計的返回狀態應為STATUS_PENDING_USER_ACTION。
21、名為Crypto的 JCA 提供程序已棄用,因為它僅有的 SHA1PRNG 算法為弱加密。應用無法再使用 SHA1PRNG(不安全地)派生密鑰,因為不再提供此提供程序。如需了解詳細信息,請參閱博文Android N?中已棄用“Crypto”安全提供程序。