性能優化1--UI優化

来源:https://www.cnblogs.com/ganchuanpu/archive/2018/07/05/9267029.html
-Advertisement-
Play Games

1.使用系統為我們提供了幾個抽象的標簽 ①include:重用 ②viewstub:按需載入 註意: ③merge:減少佈局層數 ...


1.使用系統為我們提供了幾個抽象的標簽

①include:重用

include中layout屬性指定一個外部佈局文件,通過該方式則不需要把這個佈局文件在該代碼中重覆的寫一遍了。  
若include指定了其他的android:layout_*的這種屬性,則layou_width和Layout_height必須存在。否則其他的無法生效 

②viewstub:按需載入

viewstub標簽和include標簽很相似,都是使用layout屬性來載入一個佈局。不同之處是include標簽用來重用佈局,該佈局會在App啟動載入時被載入進記憶體。而viewstub標簽所引用的佈局是不會被載入出來的,只有當你在某個時間需要使用時才會被載入出來,從而在解析layout時節省了cpu載入時間和記憶體的占用。
它的意義在於按照需要載入所需的佈局文件,在實際開發中,有很多的佈局文件在正常的情況下不需要顯示,當需要其顯示的時候才會顯示。比如網路載入動畫的佈局,這個時候沒有必要在整個界面初始化的時候將其載入進來,通過ViewStub就可以做到在使用的時候再載入。提高了程式性能。
按需載入代碼: 
((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
或者:
View  importPanel = ((ViewStub)findViewById(R.id.stub_import)).inflate();  

註意:

之前看到網上很多朋友說將View的可見性設置為gone。該View同樣不會被載入到記憶體。其實這種說法是錯誤的。從Android源碼可以知道,即使將View的visiablity設置為gone,View同樣會被載入的記憶體資源當中。即只有隻有ViewStub載入的layout在App啟動後才不會被載入到記憶體資源。

③merge:減少佈局層數

merge標簽用來取消layout的層級的顯示。大家都知道,Android頂級佈局DecorView的根佈局是讓FrameLayout。此時在我們的佈局中如果我們使用FrameLayout,就會造成佈局節點的層級疊加重覆繪製。Android為我們提供了一個叫做hierarchy viewer來查看佈局節點信息。該工具在sdk/tools目錄下。

  


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

-Advertisement-
Play Games
更多相關文章
  • 典型情況下的生命周期 onCreate 表示創建Acticity,在這個方法中可以做一些初始化的操作,如載入界面佈局資源,初始化Activity所需的數據 onRestart 表示重新啟動Activity,正常情況下,當前Activity從不見到可見,就會調用此方法。 onStart 表示啟動Act ...
  • 當執行一個確定的工作的時候,一個任務是和用戶交互的activity的集合。這些activity被排列在棧中(返回棧),每一個activity是被打開的。例如,一個email app有一個activity去顯示消息列表,當點擊一個新的消息時打開一個新的activity,新的activity被加入到返回 ...
  • Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" 解決方案: 在AFNetWorking的源文件AFURL ...
  • 版權聲明:未經博主允許不得轉載 補充 補充上一節,使用 是用來顯示列表項的,使用 需要兩個xml文件,一個是列表佈局,一個是單個列表項的佈局。如我們要在要顯示系統所有app列表項時,需要左邊app 視圖和右邊文本視圖。 一個是列表佈局 all_app_list.xml 單個列表項的佈局 list_i ...
  • 前言 大家好,給大家帶來 的概述,希望你們喜歡 學習目標 掌握兩個插件的安裝和使用,能夠實現代碼生成功能。 Android Code Generator是一款代碼生成的插件,幫助提高app的開發速度,只要打好佈局XML文件,就能幫你把Activity/Fragment/Adapter文件生成好。 而 ...
  • 平臺目的:該平臺主要用於室外,通過平板或者手機接收GPS坐標,實時繪製點、線、面數據,以便後續進行海域監測、土地確權、地圖測量提供有效數據和依據。 技術路線:Android studio3.0.1+Arcgis for android 100.2.1+GPS ...
  • if (textField == _phoneTF) { //支持刪除 if (range.length == 1 && string.length == 0) { return YES; } else if (_phoneTF.text.length ... ...
  • 1> 索引 雖然索引的目的在於提高資料庫的性能,但這裡有幾個情況需要避免使用索引。使用索引時,應重新考慮下列準則: 2> 事務 對於事務,就是資料庫的一次原子性的執行操作。原子性的執行操作為數據的整體性執行帶來的可靠安全性。在SQLite中,如果我們預設事務(會為每個插入和更新都創建一次事務,並且在 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...