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