App耗電分析與優(yōu)化

6 評論 7943 瀏覽 37 收藏 8 分鐘

文章作者結(jié)合自身經(jīng)驗(yàn)分享了關(guān)于APP耗電優(yōu)化的相關(guān)知識,希望能夠給你帶來幫助。

雖然市面上出現(xiàn)了各種大容量的電池或者快充技術(shù),但是目前在沒有新材料的支撐下,都不可能完全解決app耗電這個(gè)難題,作為產(chǎn)品經(jīng)理在設(shè)計(jì)產(chǎn)品的時(shí)候無論是否考慮耗電這個(gè)因素,用戶對某一個(gè)app耗電的多少其實(shí)是不容易感知的,即便是這樣,也希望大家能夠了解app耗電和優(yōu)化的一些基礎(chǔ)知識,在移動(dòng)互聯(lián)網(wǎng)時(shí)代下,這或多或少對于用戶來說都是有益的。

1.關(guān)于手機(jī)耗電

先來說一說手機(jī)耗電,一般來講,手機(jī)耗電分為以下五個(gè)因素:

  • 電池本身:電池的材料、密度等。
  • 硬件配置:屏幕、處理器、數(shù)據(jù)處理等等。
  • 操作系統(tǒng):無論是原生還是定制化的操作系統(tǒng),都會對耗電有極大影響。
  • 應(yīng)用軟件:本文要說的。
  • 其他:充電次數(shù)、外界溫度等等。

我們可以使用專業(yè)的測試手機(jī)電流的軟件測試手機(jī)的電流,這樣是非常精確的,或者下載三方app,最簡單是在手機(jī)設(shè)置的電量管理中觀察不同app消耗的電量多少。

2.應(yīng)用軟件耗電

了解這塊之前要知道CPU為什么會耗電?CPU在運(yùn)行復(fù)雜度不同的任務(wù)是采用調(diào)頻處理的,當(dāng)手機(jī)處理復(fù)雜任務(wù)時(shí),頻率也會提高,自然對于電量的需求會增加。另外,當(dāng)APP進(jìn)程的CPU使用率超過1%的時(shí)候,都是耗電比較大的。應(yīng)用軟件為什么會耗電?又是通過什么途徑來耗電的?總結(jié)起來大概有以下幾點(diǎn):

頻繁的交互

正常情況下,關(guān)閉后臺軟件,在玩王者榮耀游戲和聽音樂的時(shí)候手機(jī)耗電一定是差別很大的,因?yàn)橥嬗螒虻臅r(shí)候會和屏幕產(chǎn)生很多的交互,但是聽音樂就不會這樣,頻繁的交互式非常耗電的,

動(dòng)畫效果

當(dāng)我們設(shè)計(jì)交互動(dòng)畫的效果時(shí),調(diào)用的都是view或者其子類,比如按鈕在點(diǎn)擊前是效果1,點(diǎn)擊后變成效果2,設(shè)置更復(fù)雜的動(dòng)畫,此時(shí)view的重繪讓CPU或GPU不斷計(jì)算,耗電量同樣會增加。

布局文件嵌套太多

直接地說,app的布局文件影響著app展示給用戶的效果,當(dāng)布局過于復(fù)雜,布局文件嵌套太多時(shí),布局xml文件越來越繁多,查找、加載這些文件顯示時(shí)會造成CPU計(jì)算加重,也會影響手機(jī)耗電。

數(shù)據(jù)庫,SD卡操作頻繁

安卓時(shí)基于輕量級數(shù)據(jù)庫sqllite,關(guān)系型數(shù)據(jù)庫的特征就是會有復(fù)雜的數(shù)據(jù)表關(guān)系,頻繁地調(diào)用數(shù)據(jù)庫查詢語句會加重系統(tǒng)的負(fù)擔(dān),同樣的也會耗電,甚至?xí)绊懻w的性能。

定時(shí)任務(wù)喚醒CPU

安卓CPU休眠時(shí)一種安卓極致省電的一種模式,如果你息屏一段時(shí)間,CPU會自動(dòng)進(jìn)入休眠,但是喚醒CPU和亮屏不是一個(gè)概念,有這樣一個(gè)過程,當(dāng)某個(gè)應(yīng)用喚醒CPU,給你推送了某條通知,當(dāng)你亮屏打開手機(jī)后會看到這條通知,那么它就是喚醒了手機(jī)的CPU,而我們知道CPU工作時(shí)需要電量了,尤其是在頻繁喚醒的情況下,或者發(fā)送心跳包。

頻繁切換網(wǎng)絡(luò)造成

切換網(wǎng)絡(luò)往往需要硬件的支持,硬件需要跑起來也是需要電量的,并且數(shù)據(jù)網(wǎng)絡(luò)比wifi更加耗電,2G,3G,4G網(wǎng)絡(luò)耗電都不同。

高運(yùn)算量代碼

比如解析json這類耗時(shí)時(shí)間較長的數(shù)據(jù)格式,或二進(jìn)制編碼解碼等。
除了上述幾個(gè)原因之外,后臺常駐service、任務(wù)堆積的隊(duì)列太多,導(dǎo)致循環(huán)執(zhí)行太多(log日志的保存)Wake Lock使用不當(dāng)導(dǎo)致沒有及時(shí)的釋放等都會加重安卓手機(jī)的耗電。

3.應(yīng)該怎么做?

減少應(yīng)用與屏幕的交互

比如長時(shí)間讓應(yīng)用動(dòng)態(tài)地翻滾顯示不同的頁面,當(dāng)然除此之外還包括用戶和屏幕的交互,在設(shè)計(jì)app的時(shí)候適當(dāng)簡化用戶的操作流程,簡化掉可以幫助用戶做的,不僅僅是為了省電,也可以提高用戶的效率。

減少不必要的動(dòng)畫效果

有些復(fù)雜的動(dòng)畫效果完全可以省略,采用靜態(tài)的app啟動(dòng)頁,或者是點(diǎn)擊事件的交互、頁面跳轉(zhuǎn)時(shí)就用盡量減少不必要的動(dòng)畫效果。

簡化布局文件,避免過多的嵌套

在設(shè)計(jì)app時(shí),在某一頁上應(yīng)該盡量簡化布局,例如三星S8負(fù)一屏,用卡片方式呈現(xiàn),布局就很簡潔

減少數(shù)據(jù)庫,SD卡操作

在做搜索功能時(shí),要特別注意,搜索文件、聯(lián)系人、短信、通話記錄這些都是要進(jìn)行數(shù)據(jù)庫或者SD卡操作的,一方面我們要設(shè)計(jì)合理的數(shù)據(jù)表,另一方面也要盡量減少這類的搜索,能避免使用時(shí)就不用。

非必要不要使用定時(shí)任務(wù)

基于定時(shí)任務(wù)的意義,大部分的定時(shí)任務(wù)都不容易取消。

除了產(chǎn)品經(jīng)理可以做這些,程序開發(fā)者能夠做的有以下幾點(diǎn):

  • 非必要必要監(jiān)聽網(wǎng)絡(luò)廣播
  • 減少非必要log的保存,log開關(guān)的設(shè)置
  • 減少json數(shù)據(jù)解析,二進(jìn)制編碼解碼等高運(yùn)算量代碼
  • 非必要不要使用后臺常駐service
  • Wake Lock使用不當(dāng)導(dǎo)致沒有及時(shí)的釋放

雖然我們很清楚耗電的原因,但是我們還是做不好,涉及的因素方方面面,我們無法改變重構(gòu)底層代碼、無法優(yōu)化整個(gè)系統(tǒng)、技術(shù)瓶頸、不得不定時(shí)發(fā)送心跳包…但是作為一名產(chǎn)品經(jīng)理我們能夠做到是盡量減少交互、改善產(chǎn)品交互邏輯、優(yōu)化動(dòng)畫效果、簡化布局…其實(shí)我們能夠做的還很多。

 

本文由 @虛偽的溫柔 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 直接評論,國內(nèi)毒瘤把互相喚醒的勾當(dāng)去了,萬事大吉

    來自浙江 回復(fù)
  2. 確實(shí)是這樣,要是碰到容易發(fā)熱的CPU,不僅耗電還發(fā)熱,不過從我使用這么多手機(jī)來看,軟件耗電真的是影響不太大,主要還是硬件CPU、屏幕、電池,還有就是系統(tǒng)了,純APP層面影響很小。畢竟除了微信qq之外很少會有人會不停地長時(shí)間使用同一個(gè)應(yīng)用。另外感覺CPU真的太重要了,從821到835,這續(xù)航和發(fā)熱控制提升的我都不適應(yīng)了。屏幕的話,說真的還沒用過2K屏的手機(jī),就不太知道了。系統(tǒng)現(xiàn)在各家都差不多,如果有耗電的版本,都會升級優(yōu)化,沒太大問題。

    來自廣東 回復(fù)
  3. 一看就是以安卓為樣本的分析。

    回復(fù)
    1. 沒錯(cuò)

      來自浙江 回復(fù)
    2. 666

      來自湖北 回復(fù)