編輯:關於Android編程
Android N 除了提供諸多新特性和功能外,還對系統和 API 行為做出了各種變更。 本文重點介紹您應該了解並在開發應用時加以考慮的一些重要變更。
如果您之前發布過 Android 應用,請注意您的應用可能受到這些平台變更的影響。
Android N 包括旨在延長設備電池壽命和減少 RAM 使用的系統行為變更。 這些變更可能會影響您的應用訪問系統資源,以及您的系統通過特定隱式 Intent 與其他應用互動的方式。
Android 6.0(API 級別 23)引入了低電耗模式,當用戶設備未插接電源、處於靜止狀態且屏幕關閉時,該模式會推遲 CPU 和網絡活動,從而延長電池壽命。而 Android N 則通過在設備未插接電源且屏幕關閉狀態下、但不一定要處於靜止狀態(例如用戶外出時把手持式設備裝在口袋裡)時應用部分 CPU 和網絡限制,進一步增強了低電耗模式。
圖 1.低電耗模式如何應用第一級系統活動限制以延長電池壽命的圖示。當設備處於充電狀態且屏幕已關閉一定時間後,設備會進入低電耗模式並應用第一部分限制: 關閉應用網絡訪問、推遲作業和同步。 如果進入低電耗模式後設備處於靜止狀態達到一定時間,系統則會對PowerManager.WakeLock、AlarmManager鬧鈴、GPS 和 Wi-Fi 掃描應用余下的低電耗模式限制。 無論是應用部分還是全部低電耗模式限制,系統都會喚醒設備以提供簡短的維護時間窗口,在此窗口期間,應用程序可以訪問網絡並執行任何被推遲的作業/同步。
請注意,激活屏幕或插接設備電源時,系統將退出低電耗模式並取消這些處理限制。 此項新增的行為不會影響有關使您的應用適應 Android 6.0(API 級別 23)中所推出的舊版本低電耗模式的建議和最佳實踐,如低電耗模式和應用待機模式優化中所討論。 您仍應遵循這些建議(例如使用 Google Cloud Messaging (GCM) 發送和接收消息)並開始安排更新計劃以適應新增的低電耗模式行為。
Android N 刪除了三項隱式廣播,以幫助優化內存使用和電量消耗。 此項變更很有必要,因為隱式廣播會在後台頻繁啟動已注冊偵聽這些廣播的應用。 刪除這些廣播可以顯著提升設備性能和用戶體驗。
移動設備會經歷頻繁的連接變更,例如在 Wi-Fi 和移動數據之間切換時。 目前,可以通過在應用清單中注冊一個接收器來偵聽隱式CONNECTIVITY_ACTION廣播,讓應用能夠監控這些變更。 由於很多應用會注冊接收此廣播,因此單次網絡切換即會導致所有應用被喚醒並同時處理此廣播。
同理,應用可以注冊接收來自其他應用(例如相機)的隱式ACTION_NEW_PICTURE和ACTION_NEW_VIDEO廣播。 當用戶使用相機應用拍攝照片時,這些應用即會被喚醒以處理廣播。
為緩解這些問題,Android N 應用了以下優化措施:
如果您的應用使用任何 Intent,您仍需要盡快移除它們的依賴關系,以正確適配 Android N 設備。 Android 框架提供多個解決方案來緩解對這些隱式廣播的需求。 例如,JobSchedulerAPI 提供了一個穩健可靠的機制來安排滿足指定條件(例如連入無限流量網絡)時所執行的網絡操作。 您甚至可以使用JobScheduler來適應內容提供程序變化。
如需了解有關 Android N 中後台優化以及如何改寫應用的詳細信息,請參閱後台優化。
Android N 做了一些權限更改,這些更改可能會影響您的應用。
為了提高私有文件的安全性,面向 Android N 或更高版本的應用私有目錄被限制訪問 (0700)。 此設置可防止私有文件的元數據洩漏,如它們的大小或存在。 此權限更改有多重副作用:
注:迄今為止,這種限制尚不能完全執行。 應用仍可能使用原生 API 或FileAPI 來修改它們的私有目錄權限。 但是,我們強烈反對放寬私有目錄的權限。
對於面向 Android N 的應用,Android 框架執行的StrictModeAPI 政策禁止向您的應用外公開file://URI。 如果一項包含文件 URI 的 Intent 離開您的應用,應用失敗,並出現FileUriExposedException異常。
若要在應用間共享文件,您應發送一項content://URI,並授予 URI 臨時訪問權限。 進行此授權的最簡單方式是使用FileProvider類。 如需有關權限和共享文件的更多信息,請參閱共享文件。
為提高平台對於視力不佳或視力受損用戶的可用性,Android N 做出了一些更改。這些更改一般並不要求更改您的應用代碼,不過您應仔細檢查並使用您的應用測試這些功能,以評估它們對用戶體驗的潛在影響。
Android N 支持用戶設置顯示尺寸,以放大或縮小屏幕上的所有元素,從而提升設備對視力不佳用戶的可訪問性。用戶無法將屏幕縮放至低於最小屏幕寬度sw320dp,該寬度是 Nexus 4 的寬度,也是常規中等大小手機的寬度。
當設備密度發生更改時,系統會以如下方式通知正在運行的應用:
大多數應用並不需要進行任何更改即可支持此功能,不過前提是這些應用遵循 Android 最佳實踐。具體要檢查的事項:
注:如果您要緩存與配置相關的數據,則最好也包括相關元數據,例如該數據對應的屏幕尺寸或像素密度。 保存這些元數據便於您在配置變更後決定是否需要刷新緩存數據。
Android N 在“Welcome”屏幕中加入了“Vision Settings”,用戶可以在新設備上設置以下無障礙功能設置:Magnification gesture、Font size、Display size和TalkBack。 此項變更增強了與不同屏幕設置相關的錯誤的可見性。 要評估此功能的影響,您應在啟用這些設置的狀態下測試應用。 您可以在Settings > Accessibility中找到這些設置。
Android N 做了一些命名空間更改,以阻止加載非公開 API。 如果您使用 NDK,則只能使用 Android 平台提供的公開 API。 在下一個官方發布的 Android 版本上使用非公開 API 會導致應用崩潰。
為提醒您使用了非公開 API,在 Android N 設備上運行的應用會在有應用調用非公開 API 時在日志消息輸出中生成一個錯誤。 此錯誤還會作為消息顯示在設備屏幕上,以幫助增強您對此情況的認識。 您應檢查應用代碼以刪除使用非公開平台 API,並使用預覽版設備或模擬器全面測試應用。
如果您的應用依賴平台庫,則請參見 NDK 文檔,了解使用公開 API 等效項替換普通私有 API 的典型修復。 您還可以鏈接至平台庫,而無需實現此應用,如果應用使用的庫是平台的一部分(例如libpng),但不屬於 NDK,則更可如此。 此情況下,請確保您的 APK 包含您打算鏈接到的所有 .so 文件。
注意:有些第三方庫可能會鏈接至非公開 API。 如果您的應用使用這些庫,那麼當您的應用在下一個官方發布的 Android 版本上運行時可能會出現崩潰現象。
應用不應依賴或使用不屬於 NDK 的原生庫,因為這些庫可能會發生更改或從一個 Android 版本遷移至另一版本。 例如,從 OpenSSL 切換至 BoringSSL 即屬於此類更改。 此外,不同的設備可能提供不同級別的兼容性,因為不屬於 NDK 中的平台庫沒有兼容性要求。 如果您必須在較舊設備上訪問非 NDK 庫,則請依據 Android API 級別進行加載。
為幫助您診斷此類問題,下面列舉了一些在您試圖使用 Android N 開發應用時可能遇到的 Java 和 NDK 錯誤:
Java 錯誤示例:
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so" is not accessible for the namespace "classloader-namespace"
NDK 錯誤示例:
dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
以下是遇到這類錯誤的應用的一些典型修復:
AndroidRuntime::getJavaVM -> GetJavaVM fromAndroidRuntime::getJNIEnv -> JavaVM::GetEnv or JavaVM::AttachCurrentThread from .
#include
Android N 包含一些針對面向 Android for Work 的應用的變更,包括對證書安裝、密碼重置、二級用戶管理、設備標識符訪問權限的變更。如果您是要針對 Android for Work 環境開發應用,則應仔細檢查這些變更並相應地修改您的應用。
如需了解有關 Android N 中針對 Android for Work 所做變更的詳細信息,請參閱Android for Work 更新。
Android N 在注解可見性被忽略時修復錯誤。這種問題將啟用本不應被允許的運行時訪問注解。 這些注解包括:
如果您的應用依賴這種行為,請在注解中添加一項運行時必須可用的保留政策。 您可通過使用@Retention(RetentionPolicy.RUNTIME)來如此做。
您應測試應用以確保不會發生此行為。要進行此測試,您可以通過 DDMS 手動終止應用,以造成相同的崩潰現象。
在密度發生更改時,系統不會自動終止面向 N 及更高版本的應用;不過,這些應用仍可能對配置變更做出不良響應。
一、Android應用的Widget的介紹介紹:Android應用的Widget是應用程序窗口小部件(Widget)是微型的應用程序視圖,它可以被嵌入到其它應用程序中(比
以下說明全部針對Android3.0(Api-11)。本指南將介紹三種基本菜單分別是PartA:操作欄(選項菜單OptionMenu)、PartB:上下文操作模式(Act
oauth2.0授權界面,大致流程圖:前提准備:在新浪開放平台申請appkey和appsecret:http://open.weibo.com/. 熟悉oauth2.0協
Dagger2是一款最初由Square公司研發,後交由Google進行維護管理的依賴注入(Dependency Injection DI)框架。我想之所以其越來越受歡迎,