最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android性能優(yōu)化方案詳情

 更新時間:2021年11月08日 11:42:26   作者:度熊君  
這篇文章主要給大家分享的是Android項目工程內的一些性能優(yōu)化方式,文章圍繞Android項目工程優(yōu)化方式展開內容,需要的朋友可以參考一下文章的具體詳情,希望對你有所幫助

前言:

上一個季度在百度工作挺忙碌,在最后期限完成了OKR目標,因此有一段時間沒有寫文章。今天趁有機會想分享下在大型Android項目工程內的一些性能優(yōu)化方式。

1、指標

量化性能的指標有很多,但最重要的就是以下5種:

  • 包大小
  • 響應時間
  • 內存
  • CPU
  • 耗電量

優(yōu)化性能就是可以從以上5點入手。

2、包大小優(yōu)化

顧名思義就是減少apk包體積大小,apk大小主要取決于res下的資源文件、.class文件,

具體優(yōu)化措施有:

壓縮圖片大小,再在項目中使用。
AndroidStudio內,可以將png等格式的圖片壓縮為.webp格式,這可以進一步減少圖片大小。
盡可能地減少本地資源的使用,可從技術方案上考慮從服務端拉取圖片、lottie、so庫等資源。
利用lottie替換幀動畫的使用,減少幀動畫圖片資源的使用。
利用混淆刪除無用代碼,減少dex文件大小。

3、響應時間優(yōu)化

對用戶來說,響應時間自然越短越好。響應時間越短,操作也就越順暢。

響應速度包括啟動速度——點擊APP按鈕到APP首頁完全打開的過程盡可能快、頁面響應速度——用戶執(zhí)行點擊、滑動等操作后,頁面能快速響應。APP不能產生卡頓、更不能出現(xiàn)ANR。

具體優(yōu)化措施有:

  • 耗時操作應放入子線程進行處理,不能阻塞主線程。
  • SDK等資源應采用懶加載方式,需要時才進行加載,不需要時可不必加載。
  • 線上環(huán)境避免打印大量的日志。
  • 使用BitmapFactory.OptioninBitmap變量,來復用舊的Bitmap,避免為新Bitmap多次分配內存以及銷毀舊Bitmap(如果該Bitmap使用頻率高的話)

優(yōu)化view視圖渲染時間:

①若view視圖比較復雜,可考慮使用ConstraintLayout約束布局,減少視圖渲染的層級。

②若view視圖比較簡單,優(yōu)化考慮使用LinearLayout水平布局(因為LinearLayout的渲染時間比ConstraintLayout、RelativeLayout都要短)。

③避免過度渲染,如果有多個view的背景重疊在一起,可以考慮去掉底層被覆蓋的view;主題theme可以設置為NoBackground模式。

④若view視圖在需要時才被創(chuàng)建,使用ViewStub控件。

recyclerview列表控件優(yōu)化:

item view視圖優(yōu)化,同第4點。

②增加recyclerviewitem緩存數(shù)量,將網(wǎng)絡請求的數(shù)據(jù)緩存,避免二次請求網(wǎng)絡。

③在onBindViewHolder避免執(zhí)行耗時操作,因為onBindViewHolder是在主線程執(zhí)行,onBindViewHolder加耗時操作會影響滑動流暢度。

④如果不需要recyclerview的默認動畫,刪除。(如刷新時閃爍的動畫效果)

recyclerview刷新時盡量使用局部刷新,避免全局刷新。

查看view是否過度渲染可在手機開發(fā)者模式開啟以下設置:

4、內存優(yōu)化

減少內存的使用,主要是避免創(chuàng)建過多對象占用過多內存、避免內存抖動以及避免內存泄漏。

內存抖動即頻繁地創(chuàng)建和銷毀內存,在這個過程中,垃圾回收器也會頻繁工作,對內存性能造成影響。

內存泄漏即應該被GC回收的內存,由于還在被其他對象引用,導致無法被回收。內存泄漏是比較嚴重的問題,過多的內存泄漏會導致內存溢出,產生OOM的系統(tǒng)錯誤。

造成內存泄漏的原因主要有:

  • 單例類引用Context造成內存泄漏。
  • 非靜態(tài)內部類引用外部類造成內存泄漏。
  • handler引用activity造成內存泄漏。
  • 屬性動畫沒有取消,導致view一直被引用造成內存泄漏。
  • 監(jiān)聽器沒有取消、回調沒有反注冊。

內存優(yōu)化的措施有:

  • 使用線程池復用線程,因為線程本身會占用相對比較大的內存,復用就可以省下部分內存。
  • onDraw方法內避免創(chuàng)建對象。因為onDraw會被頻繁調用,導致其內部的對象也會被頻繁創(chuàng)建,占用過多內存。
  • 盡量使用StringBuilderStringBuffer拼接字符串,減少String的使用。(因為拼接字符串時,String會創(chuàng)建新的對象,而StringBuilderStringBuffer是在原字符串基礎上拼接)
  • 視圖資源不可見時進行清除,避免占用內存。如Bitmap執(zhí)行.recycle方法進行清除、對圖片和lottie資源進行銷毀。

針對內存泄漏的問題進行優(yōu)化:

①單例類應引用ApplicationContext,因為Application的Context的生命周期是和APP一致的,不會造成單例類引用某個activity的context以致該activity無法被回收的問題。

②將非靜態(tài)內部類改為靜態(tài)內部類,這樣就不會引用外部類。

handler:a.handler使用結束時調用removeCallbacksAndMessages(null)清除隊列;b.靜態(tài)內部類+弱引用方式可避免內存泄漏。

static class SafeHandler extends Handler { 
     WeakReference<MainActivity> activity; 
     public SafeHandler(MainActivity mainActivity) { 
             activity = new WeakReference<MainActivity>(mainActivity); 
    } 
    @Override public void handleMessage(Message msg) { } 
}

④屬性動畫、監(jiān)聽器使用結束應及時取消,廣播或其他一些外部庫的回調應該及時反注冊。

5、CPU優(yōu)化

CPU的作用是計算處理信息、運行程序,因此優(yōu)化的方向就是減少CPU計算的工作,提升CPU的計算效率。

具體的優(yōu)化措施有:

  • 避免主線程執(zhí)行耗時任務,耗時任務在子線程異步執(zhí)行。
  • 避免在onDraw方法里執(zhí)行大量耗時操作。
  • 暫時不需要用到的信息進行懶加載、延遲初始化。

6、耗電量優(yōu)化

優(yōu)化的措施有:

  • 避免頻繁進行網(wǎng)絡請求。
  • 避免任務被頻繁執(zhí)行,可以等任務形成一定數(shù)量時,再一起執(zhí)行。
  • 避免應用頻繁喚醒屏幕。(頻繁喚醒屏幕會導致系統(tǒng)無法進入休眠,耗電量大)

保證性能指標不下降一直是開發(fā)過程中的重中之重,如果由于開發(fā)新功能導致出現(xiàn)卡頓、機身發(fā)熱耗電量猛增、內存增大等性能問題,那樣反而會流失用戶,得不償失。因此關注性能也是RD們的一項隱形工作。希望這篇文章能對大家有所幫助。

到此這篇關于Android性能優(yōu)化方案詳情的文章就介紹到這了,更多相關Android性能優(yōu)化方案內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 你該知道的Gradle配置知識總結

    你該知道的Gradle配置知識總結

    這篇文章主要給大家介紹了關于Gradle配置的相關資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友可以參考學習,下面隨著小編來一起學習學習吧。
    2017-10-10
  • Android神兵利器之Image Asset Studio的實現(xiàn)

    Android神兵利器之Image Asset Studio的實現(xiàn)

    這篇文章主要介紹了Android神兵利器之Image Asset Studio的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • 深入解析Android中的事件傳遞

    深入解析Android中的事件傳遞

    這篇文章主要介紹了關于Android中的事件傳遞,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Android使用kotlin實現(xiàn)多行文本上下滾動播放

    Android使用kotlin實現(xiàn)多行文本上下滾動播放

    這篇文章主要為大家詳細介紹了Android使用kotlin實現(xiàn)多行文本的上下滾動播放,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Android使用AsyncTask加載圖片的操作流程

    Android使用AsyncTask加載圖片的操作流程

    今天小編就為大家分享一篇關于Android使用AsyncTask加載圖片的操作流程,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • android動態(tài)布局之動態(tài)加入TextView和ListView的方法

    android動態(tài)布局之動態(tài)加入TextView和ListView的方法

    這篇文章主要介紹了android動態(tài)布局之動態(tài)加入TextView和ListView的方法,涉及Android動態(tài)布局的實現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05
  • Android 分享控件的實現(xiàn)代碼

    Android 分享控件的實現(xiàn)代碼

    這篇文章主要介紹了Android 分享控件的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android使用SimpleDateFormat警告介紹

    Android使用SimpleDateFormat警告介紹

    大家好,本篇文章講的是Android使用SimpleDateFormat警告介紹,感興趣的同學快來看一看吧,希望對你起到幫助
    2021-11-11
  • Android利用Glide獲取圖片真正的寬高的實例

    Android利用Glide獲取圖片真正的寬高的實例

    本篇文章主要介紹了Android利用Glide獲取圖片真正的寬高的實例,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • 一步步實現(xiàn)Viewpager卡片翻頁效果

    一步步實現(xiàn)Viewpager卡片翻頁效果

    一步步實現(xiàn)Viewpager卡片翻頁效果,文章很精彩,實現(xiàn)步驟很詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

寻乌县| 房山区| 定南县| 左云县| 南康市| 启东市| 马龙县| 连州市| 康平县| 新兴县| 峨山| 汉川市| 万盛区| 临泉县| 天气| 洱源县| 漳平市| 永嘉县| 四子王旗| 乌拉特前旗| 文安县| 都兰县| 贺兰县| 开鲁县| 常德市| 临泉县| 石门县| 灵璧县| 玉门市| 华坪县| 崇明县| 五河县| 镇雄县| 南丹县| 水富县| 榆树市| 上饶市| 盐池县| 马龙县| 云南省| 平顺县|