Android vitals 幫您解決應用質量問題

2021-09-11 09:35:29 字數 3405 閱讀 6093

對於應用開發者而言,衡量應用成功最好的指標就是開心的使用者,而且是越多越好。達到這一目的的最佳途徑就是開發乙個好應用,那麼什麼樣的應用才能被稱作是 「好」 應用呢?歸根結底就是兩件事:功能以及應用質量。前者取決於開發者的創造力以及選用的商業模型;而後者則能夠被客觀測量及改善。

因此,解決應用穩定性問題能夠顯著影響到應用成功與否。

通過對應用質量的客觀測量,開發者能夠輕易發現應用亟待解決的穩定性問題,為此我們在 google play console 新增了一款名為 android vitals 的新板塊。借助 android vitals,開發者無須新增額外工具**或者庫就能了解應用存在的效能及穩定性問題。當應用在大量裝置上執行時,android vitals 會收集與應用效能相關的匿名資料。通過這種途徑獲得的資訊量是其他方式無法匹及的,即使是硬體實驗室測試也不行。

android vitals 可以向開發者傳送以下三種警告:崩潰、應用程式無法響應以及渲染次數。這三種情況都會直接影響到使用者體驗以及他們對應用的評價。此外,使用者可能不會將 「異常耗電事件」 這類不良行為與您的應用直接聯絡起來。

1.過度喚醒:過度喚醒會對電池壽命造成影響,而且在無法及時充電的情況下,可能導致使用者無法繼續使用裝置。此類行為可能會讓使用者迅速解除安裝您的應用;

2.應用程式無法響應 (anr)事件:當應用的使用者介面卡住時候,此類事件會被觸發。在介面凍結時,若您的應用在前台執行,會出現對話方塊提醒使用者 「關閉應用」 或者 「等待響應」。對使用者而言,此類行為和應用崩潰一樣糟糕。他們可能不會馬上解除安裝您的應用,但是如果 anr 問題一直不解決,就很有可能會尋找其它替代應用。

那麼,什麼是喚醒?什麼時候又是喚醒 「過度」 呢?

為了延長電池續航時間,螢幕關閉後,android 裝置會禁用主 cpu 核心,進入深度睡眠模式。除非使用者喚醒裝置,裝置最好可以盡可能長地保持這種狀態。不過,在發生某些事件的情況下,還是很有必要喚醒 cpu 並向使用者發出警告 —— 比如說,鬧鐘觸發或者收到新訊息。開發者可以通過喚醒鬧鐘 (wakeup alarm) 來處理此類警告,不過也不一定非要這麼操作,在下文中會對此稍加解釋。到目前為止,喚醒看上去似乎是個不錯的東西,讓重要事情能引起使用者注意,不過要是喚醒太多次就適得其反,電池壽命也會大打折扣。

android vitals 能夠幫助開發者了解自己的應用是否存在喚醒次數太多的問題。通過收集有關應用行為的匿名資料,android vitals 可以顯示有多少比例的使用者在裝置滿電之後,每小時經歷 10 次以上的裝置喚醒。關鍵就是看有沒有紅色的圖示出現,若圖示出現,則說明應用已經越過了不良行為門檻,屬於 google play 中表現最次的一檔應用,而您則須要想辦法改善應用行為了。

開發者主要是通過 alarmmanager api 設定 rtc_wakeup 或 elapsed_realtime_wakeup 旗標,讓應用在特定時間或者在某一時間間隔後喚醒裝置。該功能須謹慎對待,僅在沒有其它更優的任務排程和通知機制的情況下才可使用。在使用喚醒鬧鐘的時候,您需要考慮以下幾點:

-- 批量操作:批量操作任務而不是多次喚醒系統進行操作,這使裝置能更長時間處於睡眠狀態。

-- 標準:您可以明確任務執行須滿足的具體標準,如網路可用性或者電池充電狀態。設定標準能夠避免喚醒裝置以及不必要的應用執行。

-- 持續性以及自動退避 —— 繼續執行任務 (即使在重啟後) 並且在失敗的情況能自動重試。

-- 低耗電模式 (doze) 相容性 —— 僅在低耗電模式或者應用待機模式未設定任何限制的情況下,任務才能執行。

當且僅當訊息推送以及任務排程對您的任務不適用時,您才可以利用 alarmmanager 設定喚醒鬧鐘。換個角度來說就是,僅當您想要在特定時間觸發鬧鐘,不考慮網路以及其它情況,喚醒鬧鐘才是必要的。

為了解決過度喚醒問題,您須要確認應用在什麼地方設定了喚醒鬧鐘,然後降低這些鬧鐘的觸發頻率。

那麼如何檢視應用在哪些地方設了喚醒鬧鐘呢?您可以開啟 android studio 中的 alarmmanager 類,右擊 rtc_wakeup 或者 elapsed_realtime_wakeup 域,選擇 "find usages (查詢使用)",然後您就能看到專案中所有使用到此類旗標的事件了。仔細檢視每一種事件,然後考慮能否改用更為智慧型的任務排程機制。

您也可以將 find usage (查詢使用) 中的範圍設定為 「project and libraries (專案和庫)」,檢視依賴項是否在使用 alarmmanager api。如果確實在使用,那麼您應該考慮使用別的庫,或者向依賴項開發人員報告錯誤。

若您認為使用喚醒鬧鐘無法避免,那麼如果您的鬧鐘標籤滿足以下要求,play console 可以提供更好的分析資料:

那麼,什麼是應用程式無法響應 (以下簡稱為anr)?它又是怎麼影響到使用者的呢?

對使用者而言,anr 就是指當他們試圖與應用進行互動時,但介面卡住的事件。介面卡屏幾秒後,會出現對話方塊讓使用者選擇繼續等待或者強行停止應用。

從開發者的角度來看,anr 則是指應用執行的操作耗時過久,如磁碟或網路 i/o,導致主線程阻塞。主線程 (有時候也被稱為 ui 執行緒) 主要負責響應使用者事件以及每秒重新整理 60 次螢幕。因此很關鍵的一點將任何可能延時主線程工作的操作轉到後台執行緒。

android vitals 能收集並利用應用 anr 事件的匿名資料,提供多個級別的 anr 具體報告。主介面上概述了您應用中 arn 活動的概覽資訊,顯示使用者至少經歷一次 anr 事件的日對話比重,並且提供前一天以及前 30 天的情況的單獨報告。同時也提供了不良行為門檻。

開啟詳情介面,即 anr 比率頁面,您能夠了解不同時間的 anr 具體比例,以及針對不同應用版本、活動名稱、anr 類別、以及 android 系統下的 anr 情況。您可以就 apk 版本**、支援裝置、os 版本以及時間,篩選檢視這些資料。

如上文所述,當應用程序影響到主線程時,anr 事件會被觸發,而導致這種阻塞現象的原因各有不一,較為常見的有:

尋找觸發 anr 的原因不容易,我們拿 url 類舉個例子:

您想看到 url#equals (判斷兩個 url 是否相同的方法) 阻塞執行緒嗎?sharedpreferences 又怎麼處理呢?

如果您是在後台讀取數值的話,您能在前台呼叫 getsharedpreferences 嗎?

這兩種情況都很可能導致長時間阻塞操作。幸好我們有 strictmode,不用再自己瞎猜是什麼原因導致 arn 了。在除錯構建的時候,您可以使用這個工具捕捉主線程上的意外磁碟或網路訪問。

您可以在應用中使用 strictmode#setthreadpolicy,自定義檢查項,包括磁碟和網路 i/o 以及您通過 strictmode#noteslowcall 在應用中觸發的慢呼叫。同時,您也可以自己選擇讓 strictmode 通過何種方式告知已檢測到阻塞呼叫:應用崩潰、日誌記錄還是顯示對話方塊?您可參看 threadpolicy.builder class 獲取進一步資訊。

一旦您消除主線程上的阻塞呼叫,請記得再上傳應用至 play store 前,關閉 strictmode。

調查圈能幫您做什麼?

調查圈能幫您做什麼?調查圈的兩大主要功能,即調查問卷設計和反饋收集及結果分析。一 調查問卷設計 調查圈支援任何一種語言 您可以使用任何一種語言來建立調查問卷,也可以任意定義問卷中按鈕的文字。在使用者操作介面上我們提供中英雙語的操作介面,您可以自由切換,使用您習慣的介面語言。調查圈支援多種問題型別 使...

Project 2000如何幫您管理資源

為完成任務,需要安排人 裝置等在其中工作,也需要投入材料和資金,我們把這些統稱為 資源 資源管理是project 2000的另乙個非常重要的內容。它是怎樣幫助您管理資源的呢?它為您提供每個資源的全方位的資訊 幫您編制資源庫並按類別組織起來 幫您把資源分配到各個任務上 幫您檢查分配的資源是否超出了現有...

Project 2000如何幫您管理專案

網路計畫技術是現代管理科學中比較盛行的一種科學管理方法。它以縮短工期 提高效率 節約勞力 降低消耗為目標。採用這種技術,不僅在計畫制定期間求得工期 資源 成本的優化,更重要的是在計畫的執行過程中,通過資訊反饋,進行有效的監督 控制和調整,能夠保證專案預定目標的實現。project 2000是乙個功能...