App 性能優化

来源:https://www.cnblogs.com/LiuZhen/archive/2022/05/05/16219782.html
-Advertisement-
Play Games

App 性能優化 RecyclerView 1、onBindViewHolder 運行在 UI 線程,不宜進行邏輯等耗時操作,只適合把數據填入視圖; 2、使用 support 包下麵的 DiffUtil 局部刷新處理,DiffUtil(內部也是調用局部刷新方法)可以對比數據的差異,是否更改; Dif ...


App 性能優化

RecyclerView

1、onBindViewHolder 運行在 UI 線程,不宜進行邏輯等耗時操作,只適合把數據填入視圖;

2、使用 support 包下麵的 DiffUtil 局部刷新處理,DiffUtil(內部也是調用局部刷新方法)可以對比數據的差異,是否更改;

DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DiffCallBack(oldDatas, newDatas), true);
diffResult.dispatchUpdatesTo(mAdapter);

計算在主線程,如果數據量大需要放線上程中,通過 Handler 更新。

3、給可以復用 holder 的 RecyclerView 設置相同的 holder pool,在相同視圖中,不會重新創建 holder;

RecyclerView recyclerView = new RecyclerView(context);
//layoutManager.setRecycleChildrenOnDetach(true);//LinearLayoutManager 需要額外設置
recyclerView.setRecycledViewPool(mPool);

4、數據緩存,直接載入網路數據延遲比較重,載入緩存中的數據;

5、優化代碼,儘量減少對象的創建,復用對象資源,比如監聽;

6、getExtraLayoutSpace 預載入,RecyclerView 只緩存可見 view,滑動時初次載入會導致延遲卡頓,可以使用預載入處理,改變載入的滑動範圍;

7、嵌套 RecyclerView 時,通過 setInitialPrefetchItemCount 設置首次顯示個數,只有在嵌套且橫向列表才生效;

黑白屏

系統載入 app 時,會先顯示一個空白頁,空白頁背景色從應用主題中獲取,一般預設是白色。

1、通過給啟動頁單獨設置主題背景或顏色來避免,否則每個活動都會設置成一樣的啟動圖片。

設置背景顏色透明,如果啟動的活動耗時長,會導致啟動卡頓,需要避免啟動活動的耗時操作;

設置背景圖片,需要引入多張圖片來做屏幕適配,而且無法適配所有屏幕,所以一般使用 LayerDrawable,然後引入資源圖片,通過設置偏移量等參數達到適配效果。

2、減少 Application 耗時任務。

把一些非必要的第三方等操作單獨初始化,比如 IntentService。

app 啟動頁優化

apk 體積優化

佈局優化

1、減少層次嵌套;

2、減少重覆繪製,可以通過系統設置中打開 Show GPU Overdraw 設置查看,紅色表示需要優化;

3、使用 include(復用佈局)、merge(減少嵌套)、ViewStub(按需求載入,只能執行一次)。

包體積優化

1、使用 tint 避免多次導入資源;

2、資源配置,ndk、resConfigs、代碼混淆等;

3、刪除無引用資源。

ANR 處理

發生 ANR 時, 系統會在 /data/anr/ 目錄下生成一個 traces.txt 文件,可以通過 adb 命令將其導出到本地查看,一般的 ANR 都能定位到具體類。

1、iowait

日誌中顯示 CPU 占用情況,其中 io 占用大部分,表示有頻繁的讀寫(資料庫、文件)操作;

2、dalvik threads free

顯示記憶體不夠,一般會觸發 oom 異常。

網路優化

1、減少調用次數跟發送和接收數據包的大小,Android Studio 內置 Monitor 工具,可以查看接收和發送速度;

2、網路緩存;

3、七牛資源圖片等載入適合的資源,比如壓縮圖。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • stm32標準庫實現低功耗 一、概述 stm32不同系列晶元支持的低功耗模式各有差異,本文以F103系列晶元為例,簡單講解不同低功耗模式的特點和使用方法。 二、低功耗 簡述 預設情況下,系統或電源複位後,微控制器處於Run模式。當CPU不需要保持運行時(例如等待外部事件時),可以使用幾種低功耗模式來 ...
  • 背景描述 辦公室電腦,工作需要遠程式控制制,如何實現有很多方案,不贅述,我用的是frp加密轉發。 但是遇到停電、斷網等情況,如何自動恢復(單位使用了銳捷認證系統)? 另外,一天24小時開著又太浪費,只需要某些時候接受可能的遠程遙控。 在此情況下,我需要自動開機、自動聯網、定時睡眠、定時喚醒。 分項加以說 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 Redis 一、Redis安裝 1、windows下安裝 預設埠:6379 下載連接 https://github.com/tporadowski/redis/releases 解壓 雙擊redis-server.exe啟動服務端 雙擊redi ...
  • 一、Table API 和 Flink SQL 是什麼 Table API 和 SQL 集成在同一套 API 中。 這套 API 的核心概念是Table,用作查詢的輸入和輸出,這套 API 都是批處理和流處理統一的上層 API,這意味著在無邊界的實時數據流和有邊界的歷史記錄數據流上,關係型 API ...
  • 活動簡介 “開源之夏(英文簡稱 OSPP)” 是中科院軟體所 “開源軟體供應鏈點亮計劃” 指導下的一項面向高校學生的暑期活動,由中國科學院軟體研究所與 openEuler 社區共同舉辦。 2022 年為此系列活動的第三屆,開源之夏旨在鼓勵在校學生積极參与開源軟體的開發維護,促進優秀開源軟體社區的蓬勃 ...
  • 本文為墨天輪社區整理的2022年4月國產資料庫大事件和重要產品發佈消息。 ...
  • JSON 數據類型是 MySQL 5.7.8 開始支持的。在此之前,只能通過字元類型(CHAR,VARCHAR 或 TEXT )來保存 JSON 文檔。 相對字元類型,原生的 JSON 類型具有以下優勢: 在插入時能自動校驗文檔是否滿足 JSON 格式的要求。 優化了存儲格式。無需讀取整個文檔就能快 ...
  • JavaWeb連接MySQL資料庫 JavaWeb連接MySQL資料庫的方式有很多,首先我們講解JDBC的配置方法 一、JDBC的配置方法 1、什麼是JDBC 什麼是JDBC嘞?JDBC代表Java資料庫連接(Java Database Connectivity),它是用於Java編程語言和資料庫之 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...