導航:首頁 > 操作系統 > android測試內存泄漏

android測試內存泄漏

發布時間:2022-07-13 00:30:09

A. android怎樣檢測內存泄漏

生成.hprof文件:插入SD卡(Android機器很多程序都需要插入SD卡),並將設備連接到PC,在Eclipse中的DDMS中選擇要測試的進程,然後點擊Update Heap 和Dump HPROF file兩個Button。

B. Android開發中,有哪些好方法可以檢測內存泄露和性能

下面是回答的內容


內存泄露,是Android開發者最頭疼的事。可能一處小小的內存泄露,都可能是毀於千里之堤的蟻穴。怎麼才能檢測內存泄露呢?網上教程非常多,不過很多都是使用Eclipse檢測的, 其實1.3版本以後的Android Studio 檢測內存非常方便, 如果結合上MAT工具,LeakCanary插件,一切就變得so easy了。


熟悉Android Studio界面工欲善其事,必先利其器。


我們接下來先來熟悉下Android Studio的界面

結果

非獨占時間:某函數佔用的CPU時間,包含內部調用其它函數的CPU時間。
獨占時間:某函數佔用CPU時間,但不含內部調用其它函數所佔用的CPU時間。

我們如何判斷可能有問題的方法?

通過方法的調用次數和獨占時間來查看,通常判斷方法是:

如果方法調用次數不多,但每次調用卻需要花費很長的時間的函數,可能會有問題。

如果自身佔用時間不長,但調用卻非常頻繁的函數也可能會有問題。

綜述

上面給大家介紹了若干使用Android Studio檢查程序性能的工具,工具永遠是輔助,不要因為工具耽誤太長時間。如果有問題,歡迎大家糾正。

C. android手機測試中如何查看內存泄露

如何查看內存泄露

主要有2種方法

  1. 藉助工具,查看。

  2. 藉助adb 命令來查看。

【主要原理】

藉助工具來查看泄露的原因。

詳細實現方式

【工具查看】

常用工具有很多例如:

1.功能強大PC端檢測工具,如MemoryAnalyzer運行在PC端抓取Android手機中的mp文件進行深度分析。

2.小而優的Android端檢測工具,如LeakCanary隨App一起安裝會在Android手機桌面安裝的內存泄露檢測App

詳細的介紹網路裡面非常多這邊不做過多的介紹。

3.還有一種,要求不高的可以通過android studio查看內存變化等

詳細看到界面,視圖等佔用的內存情況。

【最後】

2種方法相互使用,驗證內存泄露原因。

D. 如何在Android Studio中使用LeakCanary檢測內存泄露

內存泄露檢測是項目性能優化不可避免的問題,只有解決內存泄露問題才能從根本上解決OOM。在Eclipse中提供Mat工具來檢測內存泄露,但是使用較為麻煩,界面也不是很直觀。對於有耐心,有想法的,也是可以嘗試了解一下。知道Leak的出現,為內存泄露檢測帶來了福音。

1.什麼是LeakCanary

LeakCanary

A memory leak detection library for Android and Java.

LeakCanary是一個Android和Java的內存檢測庫。

2.LeakCanary如何展示內存泄露信息

如果項目存在內存泄露,就會在狀態欄或是一個單獨的Leaks程序中顯示內存泄露信息,提供一個造成內存泄露對象的引用路徑

【錯誤2】:但是有的人沒有相應的圖標,怎麼辦?

因為gradle設置錯誤的原因,上述build分別設置了debugCompile 和 releaseCompile,具體的區別這里不細說了,需要有一定的gradle功底,才能改修完成。這里給出的最簡易的方案,適用於該產品在加入的leakCancy僅僅在測試的時候使用,而在release包中手動去除相應的代碼:【解決當前問題,但是不提倡】
1、debug 和 release 引用相同的lib

dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
}
2、使用compile 不再1區分debug 和 release12
dependencies {
compile 'com.squareup.leakcanary:leakcanary-android:1.5'
}

如果存在內存泄露,將會顯示內存泄露的對象的引用路徑。

E. 關於如何檢測Android的內存泄漏

用leakcanary三方庫,會自動幫你收集,方便查看

在build.gradle中添加依賴

debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

在public class App extends Application的onCreate()方法中:

LeakCanary.install(this);

運行應用

具體的位置。特別好用

F. 如何快速定位android app是否存在內存泄露

1、首先確定是否有內存泄露及哪個程序造成。
1.1、內存泄露已彈出out of memory對話框的情況。
這種情況很簡單,直接看對話框就知道是哪個應用的問題了。然後再分析該應用是否是因為內存泄露造成的
out of memory對話框。
》中介紹的各種方法進行分析,確定是否有內存泄露以及是哪個進程造成的內存泄露。
2、生成hprof文件,用MAT進行分析。
生成hprof文件可以在DDMS選中進程點擊窗口左上角的mp hprof file按鈕來直接生成,也可以通過在程序加代碼中來生成代碼2:voidgenerateHprof(){String packageName=getApplicationInfo().packageName;
StringhpFilePath=/data/data/+packageName+/input.hprof;try{//Debug.mpHprofData(/sdcard/input.hprof);Debug.
mpHprofData
(hpFilePath);}catch(IOException e) {//TODOAuto-generated catch block
e.printStackTrace();}}建議使用代碼生成hprof,然後使用《
Android內存泄露利器(hprof篇)》中的工具自動提取多個hprof文件,然後用MAT進行比較分析。在MAT導入.hprof文件以後,
MAT會自動解析並生成報告,點擊
Dominator Tree
,並按Package分組,選擇自己所定義的Package類,比較各個類在不同時期的RetainedHeap
,找出可疑類,然後選擇該類,點右鍵,選中
show retained Set項,參看Retained Heap
的詳細信息,進一步找出嫌疑項。
3、在代碼中查找內存泄露。
根據在MAT找到的內存泄露信息,參照《
Android內存泄漏簡介
》進一步在內存中查找內存泄露的原因並解決。
另外如果代碼很簡單,可以直接參照《
Android內存泄漏簡介
》在內存中查找內存泄露的原因並解決。

G. android 中如何分析內存泄漏

  1. 使用eclipse 自帶的 DDMS 工具分析各線程的內存使用情況,如下圖所示


Heap視圖界面會定時刷新,在對應用的不斷的操作過程中就可以看到內存使用的變化。

2.判斷當前進程是否有內存泄漏。

需要注意一個值:VM Heap頁面中部有一個data object選項,即數據對象,也就是我們的程序中大量存在的類類型的對象。

在data object一行中有一列是「Total Size」,其值就是當前進程中所有Java數據對象的內存總量,一般情況下,這個值的大小決定了是否會有內存泄漏。

3可以據下面狀態判斷內存有泄漏:
1) 不斷的操作當前應用,或者重復某一動作,注意觀察data object的Total Size值。

2) 正常情況下Total Size值都會穩定在一個有限的范圍內,也就是說如果程序中的的代碼邏輯良好,沒有創建的對象不被GC機制正常回收的情況,即便不斷的操作生成很多對象,而在虛擬機不斷的進行垃圾回收的過程中,這些對象都被正常回收了,內存使用量會保持在一個比較穩定的水平。

3) 如果代碼中存在對象引用沒有釋放的情況,則data object的Total Size值在每次GC後不會有明顯的回落,隨著操作次數的增多Total Size的值會越來越大。

H. android怎麼查找內存泄漏

1.1、內存泄露已彈出out of memory對話框的情況。
這種情況很簡單,直接看對話框就知道是哪個應用的問題了。然後再分析該應用是否是因為內存泄露造成的out of memory對話框。
1.2、對於有內存泄露,但沒造成彈出out of memory對話框的情況
使用《Android中如何查看內存》中介紹的各種方法進行分析,確定是否有內存泄露以及是哪個進程造成的內存泄露。
2、生成hprof文件,用MAT進行分析。
生成hprof文件可以在DDMS選中進程點擊窗口左上角的"mp hprof file"按鈕來直接生成,也可以通過在程序加代碼中來生成
代碼2:
void generateHprof()
{
String packageName=getApplicationInfo().packageName;
String hpFilePath="/data/data/"+packageName+"/input.hprof";
try {
//Debug.mpHprofData("/sdcard/input.hprof");
Debug.mpHprofData(hpFilePath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
建議使用代碼生成hprof,然後使用《Android內存泄露利器(hprof篇)》中的工具自動提取多個hprof文件,然後用MAT進行比較分析。
在MAT導入.hprof文件以後,MAT會自動解析並生成報告,點擊Dominator Tree,並按Package分組,選擇自己所定義的Package類,比較各個類在不同時期的Retained Heap,找出可疑類,然後選擇該類,點右鍵,選中show retained Set 項,參看Retained Heap的詳細信息,進一步找出嫌疑項。

閱讀全文

與android測試內存泄漏相關的資料

熱點內容
程序員那麼可愛25集 瀏覽:751
伺服器地址和ip地址一樣不 瀏覽:662
php中括弧定義數組 瀏覽:600
php列印堆棧 瀏覽:514
華為adb命令行刷機 瀏覽:963
人像攝影pdf 瀏覽:755
解壓文件密碼怎樣重新設置手機 瀏覽:999
高考指南pdf 瀏覽:693
爬蟲python數據存儲 瀏覽:240
u盤怎麼取消加密 瀏覽:429
567除以98的簡便演算法 瀏覽:340
pdf手機如何解壓 瀏覽:15
python描述器 瀏覽:60
戰地聯盟3解壓密碼 瀏覽:805
s型命令 瀏覽:25
php年薪5年 瀏覽:71
如何上網上設個人加密賬戶 瀏覽:44
linux打開ssh服務 瀏覽:78
微信位置可以加密嗎 瀏覽:470
演算法蠻力法 瀏覽:438