導航:首頁 > 操作系統 > android內存優化

android內存優化

發布時間:2022-01-29 12:29:13

❶ 如何降低安卓系統的運行使用內存(使用優化軟體除外)

Root,刪除大多數手機自帶的非系統軟體。減少後台服務進程。

❷ 在android開發中,有哪些好的內存優化方式

可以考慮使用ArrayMap/SparseArray而不是HashMap等傳統數據結構。通常的HashMap的實現方式更加消耗內存,因為它需要一個額外的實例對象來記錄Mapping操作。另外,SparseArray更加高效,在於他們避免了對key與value的自動裝箱(autoboxing),並且避免了裝箱後的解箱。
2. 避免在Android裡面使用Enum
Android官方培訓課程提到過「Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.」,具體原理請參考《Android性能優化典範(三)》,所以請避免在Android裡面使用到枚舉。
3. 減小Bitmap對象的內存佔用
Bitmap是一個極容易消耗內存的大胖子,減小創建出來的Bitmap的內存佔用可謂是重中之重,,通常來說有以下2個措施:
inSampleSize:縮放比例,在把圖片載入內存之前,我們需要先計算出一個合適的縮放比例,避免不必要的大圖載入。
decode format:解碼格式,選擇ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差異
4.Bitmap對象的復用
縮小Bitmap的同時,也需要提高BitMap對象的復用率,避免頻繁創建BitMap對象,復用的方法有以下2個措施
LRUCache : 「最近最少使用演算法」在Android中有極其普遍的應用。ListView與GridView等顯示大量圖片的控制項里,就是使用LRU的機制來緩存處理好的Bitmap,把近期最少使用的數據從緩存中移除,保留使用最頻繁的數據,
inBitMap高級特性:利用inBitmap的高級特性提高Android系統在Bitmap分配與釋放執行效率。使用inBitmap屬性可以告知Bitmap解碼器去嘗試使用已經存在的內存區域,新解碼的Bitmap會嘗試去使用之前那張Bitmap在Heap中所佔據的pixel data內存區域,而不是去問內存重新申請一塊區域來存放Bitmap。利用這種特性,即使是上千張的圖片,也只會僅僅只需要佔用屏幕所能夠顯示的圖片數量的內存大小
4. 使用更小的圖片
在涉及給到資源圖片時,我們需要特別留意這張圖片是否存在可以壓縮的空間,是否可以使用更小的圖片。盡量使用更小的圖片不僅可以減少內存的使用,還能避免出現大量的InflationException。假設有一張很大的圖片被XML文件直接引用,很有可能在初始化視圖時會因為內存不足而發生InflationException,這個問題的根本原因其實是發生了OOM。

5.StringBuilder
在有些時候,代碼中會需要使用到大量的字元串拼接的操作,這種時候有必要考慮使用StringBuilder來替代頻繁的「+」。
6.避免在onDraw方法裡面執行對象的創建
類似onDraw等頻繁調用的方法,一定需要注意避免在這里做創建對象的操作,因為他會迅速增加內存的使用,而且很容易引起頻繁的gc,甚至是內存抖動。
7. 避免對象的內存泄露
類的靜態變數持有大數據對象
靜態變數長期維持到大數據對象的引用,阻止垃圾回收。
非靜態內部類存在靜態實例
非靜態內部類會維持一個到外部類實例的引用,如果非靜態內部類的實例是靜態的,就會間接長期維持著外部類的引用,阻止被回收掉。
資源對象未關閉
資源性對象比如(Cursor,File文件等)往往都用了一些緩沖,我們在不使用的時候,應該及時關閉它們, 以便它們的緩沖及時回收內存。它們的緩沖不僅存在於java虛擬機內,還存在於java虛擬機外。 如果我們僅僅是把它的引用設置為null,而不關閉它們,往往會造成內存泄露。
解決辦法: 比如SQLiteCursor(在析構函數finalize(),如果我們沒有關閉它,它自己會調close()關閉), 如果我們沒有關閉它,系統在回收它時也會關閉它,但是這樣的效率太低了。 因此對於資源性對象在不使用的時候,應該調用它的close()函數,將其關閉掉,然後才置為null. 在我們的程序退出時一定要確保我們的資源性對象已經關閉。 程序中經常會進行查詢資料庫的操作,但是經常會有使用完畢Cursor後沒有關閉的情況。如果我們的查詢結果集比較小, 對內存的消耗不容易被發現,只有在常時間大量操作的情況下才會復現內存問題,這樣就會給以後的測試和問題排查帶來困難和風險,記得try catch後,在finally方法中關閉連接
Handler內存泄漏
Handler作為內部類存在於Activity中,但是Handler生命周期與Activity生命周期往往並不是相同的,比如當Handler對象有Message在排隊,則無法釋放,進而導致本該釋放的Acitivity也沒有辦法進行回收。

❸ android開發內存優化之如何有效避免oom

  1. 減小對象的內存佔用

  2. 內存對象的重復利用

  3. 避免對象的內存泄露

  4. 內存使用策略優化

❹ 安卓手機運行內存太小怎麼進行優化

安卓系統手機為智能機器,和電腦一樣,為了保證手機正常使用,會自動開啟部分程序進程(不是程序),當您清除之後,進程還是會再次顯示。若經常有程序自動啟動佔用手機內存,建議:
1.關閉後台運行的程序:點擊屏幕左下角近期任務鍵-點擊要關閉的應用程序右上角的「X」/下方的關閉全部(部分機器操作方式:長按HOME鍵(主屏幕鍵)啟動任務管理器,點擊左下角餅形圖標,點擊清除RAM數據)。
2.部分機器支持智能管理器或內存管理器,建議通過該功能手動關閉自動運行的應用程序。
3.部分第三方軟體支持開機後自動啟動功能,建議打開自動運行的軟體禁用此功能。

❺ android 面試內存優化怎麼回答

android 性能主要之響應速度 和UI刷新速度。
可以參考博客:Android系統性能調優工具介紹
首先從函數的耗時來說,有一個工具TraceView 這是androidsdk自帶的工作,用於測量函數耗時的。
UI布局的分析,可以有2塊,一塊就是Hierarchy Viewer 可以看到View的布局層次,以及每個View刷新載入的時間。
這樣可以很快定位到那塊layout & View 耗時最長。
還有就是通過自定義View來減少view的層次。

❻ Android代碼內存優化,常駐內存的應用有哪些

一些常駐內存的應用,比如Launcher、安全中心、電話等,在用戶使用過要退出的時候,需要調用OnTrimMemory來及時釋放用戶使用的時候所產生的多餘的內存資源:比如動態生成的View、圖片緩存、Fragment等。

❼ android 如何更好的回收內存空間,有沒有強

Android內存優化大全

OOM:

內存泄露可以引發很多的問題:

1.程序卡頓,響應速度慢(內存佔用高時JVM虛擬機會頻繁觸發GC)

2.莫名消失(當你的程序所佔內存越大,它在後台的時候就越可能被幹掉。反之內存佔用越小,在後台存在的時間就越長)

3.直接崩潰(OutOfMemoryError)

ANDROID內存面臨的問題:

1.有限的堆內存,原始只有16M

2.內存大小消耗等根據設備,操作系統等級,屏幕尺寸的不同而不同

3.程序不能直接控制

4.支持後台多任務處理(multitasking)

5.運行在虛擬機之上

5R:

本文主要通過如下的5R方法來對ANDROID內存進行優化:

1.Reckon(計算)

首先需要知道你的app所消耗內存的情況,知己知彼才能百戰不殆

2.Rece(減少)

消耗更少的資源

3.Reuse(重用)

當第一次使用完以後,盡量給其他的使用

5.Recycle(回收)

返回資源給生產流

4.Review(檢查)

回顧檢查你的程序,看看設計或代碼有什麼不合理的地方。

詳細

❽ 安卓手機,一開機內存就佔用80%多了,不管怎樣優化一直是90%左右,2g的運行內存,怎麼處理啊

"""建議您:
1.點擊屏幕左下角的【最近應用程序】鍵(即屏幕上唯一物理按鍵左側的觸摸按鍵)-點擊左下角【圓圈】圖標-點擊應用程序右側的【結束】圖標或【結束全部】關閉後台運行程序。
2.卸載自行安裝的應用程序。
3.清除手機上網緩存:瀏覽器-菜單鍵(右上角三個小點圖標)-設定-隱私和安全-隱私-刪除個人數據。
4.清除已讀取的來電、簡訊等記錄""
5.如果手機支持插入外置sd卡,插入SD卡後將文件轉存到SD卡中即可"

❾ android4.4手機怎麼優化內存

市面上手機清理軟體有很多種,主要看樓主喜歡什麼樣
的和適合用什麼手機安全軟體,我用的是騰訊手機管家
使用第三方安全軟體清理
新版本騰訊手機管家加速功能,則針對手機卡機現象做出專業的優化。
點擊優化加速後,後台就會清理一定的垃圾文件,從而達到優化加速功能。
在一鍵優化方面,更全面的提升手機速度,起到更為人性化的便捷服務。
可以嘗試清理後台程序。這個時候,
我們可以在手機管家的健康優化欄里找到進程管理,對進程管理進行清理。

❿ android 性能優化有哪些辦法

性能優化的常用方法

主要內容包括布局優化,繪制優化,內存泄露優化,相應速度優化,ListView優化,Bitmap優化,線程優化等,下面主要給你舉了其中的幾個例子:

(1)布局優化

布局優化的思想很簡單,就是盡量減少布局文件的層級。

如何進行優化呢?首先刪除布局中無用的控制項和層級,其次有選擇地使用性能較低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,這是因為RelativeLayout比較復雜,他的布局過程花費更多的CPU時間。FrameLayout和LinearLayout一樣都是一種簡單高效的ViewGroup,因此可以考慮使用他們,但是很多時候,單純的通過一個LinearLayout或者FrameLayout無法實現產品的效果,需要通過嵌套的方式來完成,這種情況建議採用RelativeLayout,因為ViewGroup的嵌套就相當於增加了布局的層級,同樣會降低程序的性能。

布局優化的另一種手段是採用<include>標槍,<merge>標簽和ViewStub。<include>標簽主要用於布局重用,<merge>標簽一般和<include>配合使用,它可以減少布局的層級。而ViewStub則提供了按需載入功能,當需要時才將ViewStub中的布局載入到內存,這提高了程序的初始化效率。

(2)繪制方法

繪制優化是指View的onDraw方法避免執行大量的操作,這主要有兩方面。

首先,onDraw中不要創建新的布局對象,這是因為onDraw方法可能會被頻繁調用,這樣就會在一瞬間產生大量的臨時對象,這不僅佔用了過多的內存而且還會導致系統更加頻繁的gc,降低了程序的執行效率。

另一方面,onDraw方法中不要做耗時的任務,也不能執行成千上萬次循環操作,盡管每次循環都很輕量級,但是大量的循環仍然十分搶佔CPU的時間片,這會造成View的繪制過程不流暢。

(3)內存泄露優化

內存泄露在開發過程中是一個需要重視的問題,但是由於內存泄露問題對開發人員的經驗和開發意識要求比較高,因此這是開發人員最容易犯的錯誤之一。內存泄露的優化分為兩個方面,一方面是在開發過程中避免寫出內存泄露的代碼,另一方面通過一些分析工具比如MAT來找出潛在的內存泄露繼而解決。

關於性能優化的建議

1.避免黃健過多對象;

2.不要過多使用枚舉,枚舉佔用的內存空間比整型大一些。

3.常量使用staticfinal來修飾。

4.使用一些Android特有的數據結構,比如SpareArray和Pair等,他們都具有更好的性能。

5.適當使用軟引用和弱引用。

6.採用內存緩存和磁碟緩存

7.盡量採用靜態內部類,這樣可以避免潛在的內部類而導致的內存泄漏。

閱讀全文

與android內存優化相關的資料

熱點內容
單片機清理 瀏覽:658
東風景逸空調壓縮機 瀏覽:156
天津程序員炒股 瀏覽:228
pcl源碼目錄 瀏覽:966
python分類數據轉換 瀏覽:106
wordpdf不能復制 瀏覽:960
快捷方式參數命令 瀏覽:109
cmd命令復制粘貼文件 瀏覽:582
ug實體快速修剪的命令是什麼 瀏覽:121
軟體工程對演算法的要求 瀏覽:933
元史pdf 瀏覽:95
如何讓伺服器卡爆不用tnt 瀏覽:799
兵器pdf 瀏覽:925
雲伺服器怎麼限制cpu 瀏覽:166
學信網用的什麼app 瀏覽:878
linux重啟命令apache 瀏覽:753
半夜解壓有什麼壞處 瀏覽:426
linux代理命令 瀏覽:639
調用tasking的編譯器編譯 瀏覽:294
青檸app是什麼 瀏覽:868