相信大家在調試APP時都是用Logcat去查看整個APP的運行時打印出來的Log,而當我們需要去優化APP的啓動速度或者APP卡頓嚴重時,我們就要使用工具去查看內存和CPU的使用情況了!
一.要打開上面的面板,一般有兩種方式
1.首先選擇跟蹤範圍,在想要根據的代碼片段之間使用以下兩句代碼.
Debug.startMethodTracing(“hello”);
Debug.stopMethodTracing();
生成的traceview文件會自動放在SDCARD上,沒有SDCARD卡會出現異常,所以使用這種方式需要確保應用的AndroidMainfest.xml中的SD卡的讀寫權限是打開的,其中hello是traceview文件的名字,是然後用adb導出traceview文件。
2.同樣是要先打開Android Device Monitor
先選擇應用進程,然後點擊Start Method Profiling(開啓方法分析),按鈕會變爲Stop Method Profiling(停止方法分析),開啓方法分析後,對應用的目標頁面進行測試操作,測試完畢後停止方法分析,界面會自動跳轉到 DDMS 的 trace 分析界面。
兩種方式的對比:第一種方式更精確到方法,起點和終點都是自己定,不方便的地方是自己需要添加方法並且要導出文件,第二種方式的優缺點剛好相反。
2、分析方式
下面寫一個DEMO,來分別模擬調用次數不多,但每次調用卻需要花費很長時間的函數,和自身佔用時間不長,但調用卻非常頻繁的函數。
public class MainActivity extends Activity {
int count = 0;
long longCount=-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Debug.startMethodTracing("hello");
new Thread(new Runnable() {
@Override
public void run() {
printNum();
}
},"printNum_thread").start();
new Thread(new Runnable() {
@Override
public void run() {
calculate();
}
},"calculate_thread").start();
}
@Override
protected void onDestroy() {
super.onDestroy();
Debug.stopMethodTracing();
}
private void printNum() {
for (int i = 0; i < 20000; i++) {
print();
}
}
private void print(){
count=count++;
}
private void calculate(){
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
for (int l = 0; l < 1000; l++) {
if(longCount>10){
longCount=-10;
}
}
}
}
Log.e("MainActivity",String.valueOf(longCount));
}
}
現在來分析一下采集的數據。先看線程面板