28
Использование debug утилит в разработке под Android Антоненко Вячеслав Android developer 24.06.2011 1 Friday, July 1, 11

Использование Debug утилит в разработке под Android

Embed Size (px)

DESCRIPTION

Antonenko V., Android developer at SoftTechnics

Citation preview

Page 1: Использование Debug утилит в разработке под Android

Использование debug утилит в разработке под Android

Антоненко ВячеславAndroid developer

24.06.2011

1

Friday, July 1, 11

Page 2: Использование Debug утилит в разработке под Android

Утилиты

Memory Analyzer (MAT)Traceview

HierarchyviewerLayoutopt

Logcat

Friday, July 1, 11

Page 3: Использование Debug утилит в разработке под Android

Поиск утечки памяти

Анализ логов Причины утечки памяти Memory Analyzer

Friday, July 1, 11

Page 4: Использование Debug утилит в разработке под Android

Анализ лога

D/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms

+2ms

Friday, July 1, 11

Page 5: Использование Debug утилит в разработке под Android

Анализ лога

D/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms

Причина GC•GC_CONCURRENT•GC_FOR_MALLOC•GC_EXTERNAL_ALLOC•GC_HPROF_DUMP_HEAP•GC_EXPLICIT

Friday, July 1, 11

Page 6: Использование Debug утилит в разработке под Android

Анализ логаD/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms

Reason for GC Amount freed

Friday, July 1, 11

Page 7: Использование Debug утилит в разработке под Android

Анализ лога

D/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms

Reason for GC Amount freed Heap statistics

Friday, July 1, 11

Page 8: Использование Debug утилит в разработке под Android

Анализ лога

D/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms

Reason for GC Amount freed Heap statistics External memory statistics

Friday, July 1, 11

Page 9: Использование Debug утилит в разработке под Android

Анализ лога

D/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms

Reason for GC Amount freed Heap statistics External memory statistics Pause time

Friday, July 1, 11

Page 10: Использование Debug утилит в разработке под Android

Причины утечки памяти

Ссылки на не используемые объекты

Ссылки на Acitvity, Drawable, View

Долго живущие статические переменные

Не статические внутренние классы

Friday, July 1, 11

Page 11: Использование Debug утилит в разработке под Android

Получение дампа памяти

Получение дампа–DDMS–android.os.Debug.dumpHprofData() Конвертация в стандартный HPROF формат–hprof-con dump.hprof converted_dump.hprof Анализ при помощи MAT

Friday, July 1, 11

Page 12: Использование Debug утилит в разработке под Android

Демонстрация примера работы с MAT

Friday, July 1, 11

Page 13: Использование Debug утилит в разработке под Android

Friday, July 1, 11

Page 14: Использование Debug утилит в разработке под Android

Friday, July 1, 11

Page 15: Использование Debug утилит в разработке под Android

Оптимизация скорости работы приложения

Поиск узких мест в приложении

Оптимизация пользовательских элементов управления

Friday, July 1, 11

Page 16: Использование Debug утилит в разработке под Android

Поиск «узких» мест в приложении

Утилиты:

TraceviewРежим StrictMode

Friday, July 1, 11

Page 17: Использование Debug утилит в разработке под Android

Использование Traceview из Eclipse

Friday, July 1, 11

Page 18: Использование Debug утилит в разработке под Android

Использование Traceview из кода

android.os.Debug.startMethodTracing("trace_file_name"); // your code is hereandroid.os.Debug.stopMethodTracing();

Необходимо установить разрешение на WRITE_EXTERNAL_STORAGE

Получение trace из устройства

adb pull /sdcard/trace_file_name.traceTraceview trace_file_name

Friday, July 1, 11

Page 19: Использование Debug утилит в разработке под Android

Режим StrictMode

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());

Friday, July 1, 11

Page 20: Использование Debug утилит в разработке под Android

Friday, July 1, 11

Page 21: Использование Debug утилит в разработке под Android

…StrictMode(13858): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:758) …StrictMode(13858): at com.softtechnics.mobiletalk.traceview.MobileTalkOptTraceViewActivity.onCreate(MobileTalkOptTraceViewActivity.java:25) …

Friday, July 1, 11

Page 22: Использование Debug утилит в разработке под Android

Оптимизация пользовательских элементов

Утилиты

hierarchyviewer layoutopt

Friday, July 1, 11

Page 23: Использование Debug утилит в разработке под Android

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:layout_width="fill_parent" android:layout_height="120dip" android:background="@drawable/gradient_ligh_perfor_bg_bmp" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="20dip" android:paddingRight="20dip" android:paddingTop="55dip"> <EditText android:id="@+id/email" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:inputType="textEmailAddress" android:background="@drawable/reg_pole" android:hint="@string/hint_email" android:textColorHint="#545353" android:lines="1" /> //some code ... </RelativeLayout></FrameLayout>

Friday, July 1, 11

Page 24: Использование Debug утилит в разработке под Android

Friday, July 1, 11

Page 25: Использование Debug утилит в разработке под Android

<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android"> <View android:layout_width="fill_parent" android:layout_height="120dip" android:background="@drawable/gradient_ligh_perfor_bg_bmp" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="20dip" android:paddingRight="20dip" android:paddingTop="55dip"> <EditText android:id="@+id/email" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:inputType="textEmailAddress" android:background="@drawable/reg_pole" android:hint="@string/hint_email" android:textColorHint="#545353" android:lines="1" /> //some code ... </RelativeLayout></merge>

Friday, July 1, 11

Page 26: Использование Debug утилит в разработке под Android

Friday, July 1, 11

Page 27: Использование Debug утилит в разработке под Android

layoutopt MobileTalkOptUI/res/layout/

MobileTalkOptUI/res/layout/pay.xml31:607 This ScrollView layout or its LinearLayout parent is possibly useless36:606 This LinearLayout tag should use android:layout_height="wrap_content«78:91 This tag and its children can be replaced by one <TextView/> and a compound drawable118:130 This LinearLayout layout or its LinearLayout parent is useless129:129 Use an android:layout_height of 0dip instead of wrap_content for better performance148:161 This LinearLayout layout or its LinearLayout parent is useless160:160 Use an android:layout_height of 0dip instead of wrap_content for better performance

MobileTalkOptUI/res/layout/main.xml

Использование Layoutopt

Friday, July 1, 11

Page 28: Использование Debug утилит в разработке под Android

Спасибо за внимание!

ул. Михайловская 25Одесса 65005, Украинаwww.softtechnics.biz

Friday, July 1, 11