1. 程式人生 > >android 專案之優化--app卡頓

android 專案之優化--app卡頓

隨著android技術的提升,app在效能優化方面做的越來越好,在公司做專案的時間內,或多或少學了一些初級優化的方案,在這裡分享給大家看,不過大多數都是前人的經驗教訓總結,在這裡進行重述罷了。

每一個專案裡面都不可缺少的app的元件 activity,站在開發人員的角度來說,其實就是一個視覺化介面,所做的功能就是繪製介面,填寫資料,和使用者進行互動。看起來在activity裡面做的事情特別的多,優化也成了一大難題,但我們可以慢慢來拆分一下。

首先要了解的是android系統按照app的優先級別給每個app都分配的有不同大小的記憶體,所以一旦超出了這部分的記憶體,就是我們最鬱悶的OOM問題。故而我們最簡單最直接最粗暴的方式,回收。將不需要再次飲用的物件置空,通過system.gc(),可這都只是一個指標不治本的辦法。那何謂治本?

第一步,要提到的一個詞語:渲染,在我看來,基礎的渲染工作就是android將你的xml佈局檔案繪製到螢幕上。如果xml太過於複雜,造成的後果當然就是渲染時間過長,app卡頓現象嚴重,於是優化方案一就出來了,

一、簡化佈局,儘量使用相對佈局,減少巢狀;

在寫佈局的時候,儘量做到能不巢狀佈局的不要巢狀,也不是說整個頁面都不進行多層巢狀,而是省去那些不必要進行的潛逃,儘量處理好控制元件的位置關係,做到能做到的最優方案。而使用相對佈局比線性佈局更好的原因是在於,在渲染過程中,使用線性佈局使得在繪製這個佈局的時候會先去檢視裡面的所有子元素,然後計算出他們所佔的大小,尤其在設定了weight這個引數的時候,他們會被反覆的測量大小,那麼尤其在在adapterview繪製的時候,無疑減慢了執行速度,而且更多的耗費了效能。

第二步,依舊是渲染層面的,這個時候不能不提到一個關鍵,圖片。在一個頁面中,對於圖片的優化更是重中之重,因為圖片對app的效能起到了最重要的作用,尤其是大量圖片展示的那種app,當圖片本身的體積太過龐大,那麼就會使app被分配的記憶體一點點的佔滿,一旦超出這個值域,後果就是崩潰。那麼對於圖片的優化有什麼方案呢?

二、儘量減少drawable圖片的體積,載入網路圖片的時候別忘了對圖片本身進行壓縮

壓縮圖片顯然在這裡是重點,當圖片的體積非常之輕的時候,那也就意味著你可以載入更多的圖片,也可以毫無壓力的減輕app卡頓的問題。但是壓縮只是處理的第一步。很多人喜歡使用background設定圖片背景,那麼這裡就要注意了,在xml使用的圖片背景可以優化的那就大膽的優化,當然要保持和產品原型一致,但是你所做的工作就是選擇合適圖片進行載入設定。還有一個地方的陷阱--bitmap,當你的頁面使用了bitmap的時候,那麼回收就是必不可少的,這也是老生常談了。

第三步,android中還有一個不知道是另開發者痛苦還是讓使用者舒適的一個設定,頁面快取機制。也就是說當我們在呼叫finifsh的時候,表面上看頁面被銷燬了,那麼,這個頁面所建立的記憶體就應該被回收才對。其實不然,頁面看似被finish掉了,但是儲存頁面的棧並沒有對activity移除,這是一個快取機制,為了使使用者在短時間內再次訪問這個頁面的時候,可以快速的被重現該頁面。帶來的痛苦就是,開啟的頁面過多時,消耗的記憶體也是相當的可觀的。所以我們可以對頁面進行頁面管理,

三、通過建立stack<object>等,進行頁面管理。

建立BaseActivity,通過繼承BaseActivity,建立頁面管理。於此同時,BaseActivity也可以寫一些公共方法,也是一個非常好的程式碼習慣。

第四步,更是我們平時寫程式碼中必不可少的習慣啦,adapter的複用更是不得不做的事情。

四、adapter的複用

不知道各位小夥伴們的複用模式是否正確?並且在adapter的方法getView的方法內儘量不要重複大量的用類.getInstance()這種方式獲取物件,最佳的選擇就是提取出來成為adapter的自身屬性了。

以上只是對於一個新手來說所需要明白掌握的優化方案,在這種情況下,app優化出來的效果明顯提升了很多。

相關推薦

android 專案優化app

隨著android技術的提升,app在效能優化方面做的越來越好,在公司做專案的時間內,或多或少學了一些初級優化的方案,在這裡分享給大家看,不過大多數都是前人的經驗教訓總結,在這裡進行重述罷了。 每一個專案裡面都不可缺少的app的元件 activity,站在開發人員的角度來說

Android app優化導致app 慢的直接原因

大多數使用者感知到的卡頓等效能問題的最主要根源都是因為渲染效能。從設計師的角度,他們希望App能夠有更多的動畫,圖片等時尚元素來實現流暢的使用者體驗。但是Android系統很有可能無法及時完成那些複雜的介面渲染操作。Android系統每隔16ms發出VSYNC訊號,觸發

Android入門開源專案仿開眼視訊APP

開眼短視訊(OpenEyes) 仿照(開眼視訊)Android端(舊版UI,新版UI已改變)做的一個App,每天更新一個精美短視訊應用,一個非常美的短視訊應用,UI介面基本上是參照開眼視訊Android端來做的。 在該專案中,我採用的是Vitamio的視訊播放器框架

android專案效能優化啟動時間

一般來說,判定一個android專案效能優劣,我們有以下幾個指標: 啟動時間 apk大小 UI渲染 穩定性 記憶體佔用 電量消耗 接下來,讓我們就這幾個指標展開來詳述各自究竟應該怎樣去優化。 啟動時間 一般來說,應用啟動時間分為三種 首次啟動

android系統性能優化(63)---Android APP 問題分析及解決方案

使用者對卡頓的感知, 主要來源於介面的重新整理. 而介面的效能主要是依賴於裝置的UI渲染效能. 如果我們的UI設計過於複雜, 或是實現不夠友好,計算繪製演算法不夠優化, 裝置又不給力, 介面就會像卡住了一樣, 給使用者卡頓的感覺.如果你的應用介面出現卡頓不流暢的情況,不用懷疑,這很大原因是你沒有在16ms完成

詳解Android App優化問題

所謂app卡頓原因就是在執行時出現了丟幀,還可能是UI執行緒被阻塞。首先來一下丟幀現象,android每16ms會對介面進行一次渲染,如果app的繪製、計算等超過了16ms那麼只能等下一個16ms才能進行渲染,這就發生了丟幀現象。 手機卡頓出現的原因: 1,佈局過於複雜:x

Android學習——優化篇(1)

androi static 實用 mod 簡單 keys 階段 數據 秒級 一、優化的品質 1.簡練。2.可讀性強。3.模塊化;4.層次性;5.設計良好。6.高效。7.優雅;8.清晰。 二、常見的編程規範 1. 基本要求 · 結構清晰,簡

實習專案(二)APP熱點標籤分析

APP熱點標籤分析 專案角色: 核心研發 開發組人員: 1 工作內容: 通過hive資料倉庫,hivesql語句和udf/udaf/udtf對海量資料完成統計分析,找到熱度標籤,通過熱度標籤能夠提高APP的下載量和使用量   一、主要過程基本點 1.資料倉庫工作的四

Kotlin開發Android專案靜態方法、靜態變數使用示例

Kotlin開發Android專案之靜態方法、靜態變數使用示例 1.Kotlin定義一個都是靜態方法的類   Kotlin定義一個都是靜態方法的類,比如專案中比較常見的工具類,只需要將類class換為object即可,下面是Java寫法和Kotlin寫法的對比: Java寫法:

構建Android專案RxAndroid+Retrofit網路請求

注意 Retrofit 2.0+和Retrofit 2.0之前的版本語法上有差別,本文基於Retrofit2.1.0 什麼是Retrofit? retrofit是一款針對Android網路請求的開源框架,它與okhttp一樣出自Square公司。Rotrofit2.0的

eclipse開發Android專案Rejecting re-init on previously-failed class java.lang.Class錯誤

本來好好的一個專案,都使用好久了的,結果在我加入訊飛語音識別功能,一切準備就緒,就差上機執行的時候,安裝完apk之後突然閃退。。。一倆懵逼啊我,我確定我的程式碼都是非常完美的啊,並且該新增的許可權啊,jar包啊啥的,該有的都有了啊,為啥還會閃退啊。 尤其是當我看到錯誤提示的

Android專案JSON解析(3種解析技術詳解)

前言: 在我寫部落格前再宣告一下,我希望轉載我文章的某某某記得註明:(),要尊重我的勞動成果,這樣才能給我更多的支援和鼓勵!差不多有3天沒有寫部落格了,要想的、要做的事情太多了,額....原歸正傳,今天接著上一篇部落格:Android專案之JSON解析(扯淡),繼續分享我對

Android AppBarLayout + RecyclerView 下滑到第一條解決

網上給出的方法大致為一下四種,擇優食用 1. 自定義一個 behavior public class FlingBehavior extends AppBarLayout.Behavior { private static

Android】RelativeLayout效能優化,避免畫面

今天在照著書寫拖動seekbar來改變圖片的色調、飽和度和亮度的demo的時候, 發現自己的demo在拖動seekbar的時候比書上的demo要有明顯的卡頓。 一開始以為是SeekbarAPI更新的問題,我用的是26的API,書上的是21的API, 但很快這種懷疑的念頭就被

Android專案性別選擇

package com.example.androiddemo; import android.app.Activity; import android.os.Bundle; import android.widget.RadioButton; import android

Android APP 問題分析及解決方案

使用者對卡頓的感知, 主要來源於介面的重新整理. 而介面的效能主要是依賴於裝置的UI渲染效能. 如果我們的UI設計過於複雜, 或是實現不夠友好,計算繪製演算法不夠優化, 裝置又不給力, 介面就會像卡住了一樣, 給使用者卡頓的感覺. 如果你的應用介面出現卡頓不流

Android 專案飛機大戰

首先,我們要建立一個GameSurface()類;我們此次採用的是畫登入介面的方式,所以GameSurface()需要繼承SurfaceView類而且要執行SurfaceHolder.Callback的方法,並且實現其中的沒有完成的方法surfaceChanged、surf

Android專案android SDK視訊播放與vitamio視訊播放

前言:         今天我想給大家分享Android的視訊播放!如今我又想起了當初我做的那個專案,那是接我姐夫單做的,不是很大的專案,我用了差不多半個月的時間完成了需求,現在回想起來真的不夠完美,覺得虧待了我姐夫,保證下次做好點!!!為啥這樣說呢?沒錯,就是視訊播放這

Android學習——優化篇(2)

壓縮 基礎 item 基本數據 android應用 質量 例如 沒有 事情 一、高級優化 ? ? 上篇主要從0基礎優化的方式,本篇主要將從程序執行性能的角度出發,分析各種經常使用方案

Android 教你如何發現 APP

最近部門打算優化下 APP 在低端機上的卡頓情況,既然想優化,就必須獲取卡頓情況,那麼如何獲取卡頓情況就是本文目的。 一般主執行緒過多的 UI 繪製、大量的 IO 操作或是大量的計算操作佔用 CPU,導致 App 介面卡頓。只要我們能在發生卡頓的時候,捕捉到主執行緒的堆疊資訊和系統的資源使用資訊,即可準確分析