久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Android的Doze and App Standby模式是什么

共計(jì) 2785 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“Android 的 Doze and App Standby 模式是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Optimizing for Doze and App Standby

從 Android6.0 開始,Android 提供了兩種省電延長(zhǎng)電池壽命的功能:Doze 和 App Standby;

表現(xiàn)形式:當(dāng)設(shè)備沒(méi)有連接到電源,設(shè)備進(jìn)入 Doze 模式時(shí),系統(tǒng)將通過(guò)延遲最近用戶沒(méi)有使用的應(yīng)用程序的后臺(tái) CPU 運(yùn)作及網(wǎng)絡(luò)活動(dòng),讓應(yīng)用程序處于 App Standby 狀態(tài),以此來(lái)減少電池消耗。谷歌表示,在 Nexus5 和 Nexus6 上測(cè)試,當(dāng)屏幕處于關(guān)閉狀態(tài),平均續(xù)航時(shí)間提高 30%;

版本要求:Android6.0(API level 23)及其更高版本;

開發(fā)者影響:為了保證用戶的最佳體驗(yàn),開發(fā)者有必要在 Doze 和 App Standby 模式下測(cè)試應(yīng)用程序,及其對(duì)代碼進(jìn)行相應(yīng)的調(diào)整。

Understanding Doze1. 設(shè)備進(jìn)入 Doze 睡眠模式時(shí)機(jī):

用戶不操作設(shè)備一段時(shí)間

屏幕關(guān)閉

設(shè)備未連接電源充電

2.Doze 模式下應(yīng)用程序有什么變化:

系統(tǒng)試圖通過(guò)限制應(yīng)用程序訪問(wèn)網(wǎng)絡(luò)和 CPU 密集型服務(wù)節(jié)省電池;

防止應(yīng)用程序訪問(wèn)網(wǎng)絡(luò),推延應(yīng)用程序的工作,同步,和標(biāo)準(zhǔn)的警報(bào);

系統(tǒng)定期提供一個(gè)短暫的時(shí)間讓應(yīng)用程序完成延遲的工作活動(dòng),在這個(gè)時(shí)間片里,系統(tǒng)將提供維持性窗口應(yīng)用程序訪問(wèn)網(wǎng)絡(luò),運(yùn)行在等待的同步,工作,和報(bào)警等活動(dòng)。

Doze 模式的五種狀態(tài),分別如下:

ACTIVE:手機(jī)設(shè)備處于激活活動(dòng)狀態(tài)

INACTIVE:屏幕關(guān)閉進(jìn)入非活動(dòng)狀態(tài)

IDLE_PENDING:每隔 30 分鐘讓 App 進(jìn)入等待空閑預(yù)備狀態(tài)

IDLE:空閑狀態(tài)

IDLE_MAINTENANCE:處理掛起任務(wù)

如下圖所示,Doze 期間提供間隔一小段時(shí)間(30s)供應(yīng)用程序使用網(wǎng)絡(luò)和處理掛起的活動(dòng)。

從這張圖我們可以看到,系統(tǒng)進(jìn)入 Doze 模式后,系統(tǒng)會(huì)隔一段時(shí)間處理正在掛起的任務(wù),隨著時(shí)間推移,后面間隔的時(shí)間會(huì)越來(lái)越長(zhǎng),以此來(lái)減少電量消耗。

3. 退出 Doze 模式(系統(tǒng)退出休眠,所有的應(yīng)用程序恢復(fù)正常活動(dòng)):

用戶喚醒裝置移動(dòng),打開屏幕

或者設(shè)備連接電源

4.Doze 有哪些限制?

網(wǎng)絡(luò)連接會(huì)被禁止

Wake Lock 會(huì)被屏蔽

AlarmManager 定時(shí)任務(wù)延遲到下一個(gè) maintenance window 進(jìn)行處理,除非使用 AlarmManager 提供的方法:setAndAllowWhileIdle() 或者 setExactAndAllowWhileIdle()

系統(tǒng)將不掃描熱點(diǎn) WIFI

同步工作將被禁止

不允許 JobScheduler 進(jìn)行任務(wù)調(diào)度

5. 適配 Doze 模式有什么方法?

Doze 影響到 AlarmManager 鬧鐘和定時(shí)器管理活動(dòng),在 Android6.0 引入了兩個(gè)新方法:setAndAllowWhileIdle() 和 setExactAndAllowWhileIdle(),調(diào)用兩個(gè)方法可以在 Doze 模式下讓系統(tǒng)響應(yīng)定時(shí)任務(wù)

Doze 模式下限制了網(wǎng)絡(luò)的連接,如果應(yīng)用程序依賴于實(shí)時(shí)信息,那么這個(gè)將影響 App 的體驗(yàn)。那么你需要使用 Google Cloud Messaging (GCM) 谷歌云消息(后面詳細(xì)講解)

6. 測(cè)試 Doze 和 App Standby 模式的方法(Adb 命令)

測(cè)試 Doze 模式

首先確保你的硬件或虛擬設(shè)備是 Android6.0 或更高版本系統(tǒng);

連接設(shè)備到開發(fā)機(jī)上并安裝你的 app;

運(yùn)行 app 并讓其運(yùn)行活動(dòng);

關(guān)閉設(shè)備的屏幕;

運(yùn)行以下 adb 命令使系統(tǒng)進(jìn)入 Doze 模式:

$ adb shell dumpsys battery unplug

$ adb shell dumpsys deviceidle step

觀察你的 app 表現(xiàn)行為是否有需優(yōu)化改進(jìn)的地方。

測(cè)試 App Standby 模式

步驟 1 - 3 同測(cè)試 Doze 模式

運(yùn)行以下 adb 命令迫使系統(tǒng)進(jìn)入 App Standby 模式:

$ adb shell dumpsys battery unplug

$ adb shell am set-inactive true

模擬喚醒你的應(yīng)用程序使用以下命令:

$ adb shell am set-inactive false

$ adb shell am get-inactive

觀察你的 App,確保應(yīng)用程序恢復(fù)正常從待機(jī)模式過(guò)程中,App 的通知及其背部活動(dòng)能達(dá)到預(yù)期結(jié)果。

Understanding App Standby

當(dāng)用戶不觸摸使用應(yīng)用程序一段時(shí)間時(shí),該應(yīng)用程序處于 App Standby 狀態(tài),系統(tǒng)將把該 App 標(biāo)志為空閑狀態(tài)。除非觸發(fā)以下任意條件,應(yīng)用程序?qū)⑼顺?App Standby 狀態(tài):

用戶主動(dòng)啟動(dòng)該 App;

該 App 當(dāng)前有一個(gè)前臺(tái)進(jìn)程(或包含一個(gè)活動(dòng)的前臺(tái)服務(wù),或被另一個(gè) activity 或前臺(tái) service 使用);

App 生成一個(gè)用戶所能在鎖屏或通知托盤看到的 Notification, 而當(dāng)用戶設(shè)備插入電源時(shí),系統(tǒng)將會(huì)釋放 App 的待機(jī)狀態(tài),允許他們自由的連接網(wǎng)絡(luò)及其執(zhí)行未完成的工作和同步。如果設(shè)備空閑很長(zhǎng)一段時(shí)間,系統(tǒng)將允許空閑 App 一天一次訪問(wèn)網(wǎng)絡(luò)。

Doze 和 App Standby 的區(qū)別:

Doze 模式需要屏幕關(guān)閉(通常晚上睡覺(jué)或長(zhǎng)時(shí)間屏幕關(guān)閉才會(huì)進(jìn)入),而 App Standby 不需要屏幕關(guān)閉,App 進(jìn)入后臺(tái)一段時(shí)間也會(huì)受到連接網(wǎng)絡(luò)等限制。

Using GCM to Interact with Your App While the Device is Idle1. 什么是 GCM?

Google Cloud Messaging(GCM) 是一個(gè)云到設(shè)備的服務(wù),可以讓你支持實(shí)時(shí)在云端服務(wù)和 Android 設(shè)備上應(yīng)用程序之間的消息傳遞。

GCM 提供了一個(gè)持久連接到云端的鏈接,讓所有需要實(shí)時(shí)消息傳遞應(yīng)用程序可以共享此鏈接。這個(gè)共享鏈接顯著優(yōu)化電池消耗,使其不必讓多個(gè)應(yīng)用程序各位維護(hù)自己?jiǎn)为?dú)的持久鏈接而使電池迅速耗盡。

由于這個(gè)原因,官方建議:如果你的應(yīng)用需要消息傳遞與后端服務(wù)集成,我們強(qiáng)烈建議盡可能的使用 GCM,而不是單獨(dú)維護(hù)自己的網(wǎng)絡(luò)鏈接。

GCM 消息擁有高優(yōu)先級(jí),不影響 Doze 模式,且不會(huì)不影響其他應(yīng)用程序的狀態(tài)。這意味著你的應(yīng)用程序可以使用它們進(jìn)行通信,同時(shí)最大限度地減少電池在整個(gè)系統(tǒng)和設(shè)備的影響。

以下來(lái) GCM 自官方解釋:

一個(gè) GCM 實(shí)現(xiàn)包括谷歌連接服務(wù)器,在你的環(huán)境中通過(guò) HTTP 或 XMPP 協(xié)議的連接服務(wù)器進(jìn)行交互的應(yīng)用程序服務(wù)器和客戶端應(yīng)用程序。

$ adb shell dumpsys deviceidle whitelist +

$ adb shell dumpsys deviceidle

“Android 的 Doze and App Standby 模式是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計(jì)2785字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 石门县| 三亚市| 阜康市| 沈丘县| 乌审旗| 拜泉县| 高台县| 陇西县| 曲麻莱县| 布拖县| 龙井市| 中卫市| 鄂伦春自治旗| 北碚区| 刚察县| 阿巴嘎旗| 祥云县| 北宁市| 德兴市| 德江县| 航空| 澜沧| 泊头市| 邳州市| 新宁县| 驻马店市| 南丹县| 湘乡市| 新野县| 微山县| 靖宇县| 剑川县| 宝应县| 土默特左旗| 伊川县| 呼和浩特市| 阳高县| 河南省| 石家庄市| 韶山市| 阳泉市|