Использование debug утилит в разработке под android
DESCRIPTION
Antonenko V., Android developer at SoftTechnicsTRANSCRIPT
Использование debug утилит в разработке под Android
Антоненко ВячеславAndroid developer
24.06.2011
1
Friday, July 1, 11
Утилиты
Memory Analyzer (MAT)Traceview
HierarchyviewerLayoutopt
Logcat
Friday, July 1, 11
Поиск утечки памяти
Анализ логов Причины утечки памяти Memory Analyzer
Friday, July 1, 11
Анализ лога
D/dalvikvm( 3215): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms
+2ms
Friday, July 1, 11
Анализ лога
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
Анализ лога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
Анализ лога
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
Анализ лога
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
Анализ лога
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
Причины утечки памяти
Ссылки на не используемые объекты
Ссылки на Acitvity, Drawable, View
Долго живущие статические переменные
Не статические внутренние классы
Friday, July 1, 11
Получение дампа памяти
Получение дампа–DDMS–android.os.Debug.dumpHprofData() Конвертация в стандартный HPROF формат–hprof-con dump.hprof converted_dump.hprof Анализ при помощи MAT
Friday, July 1, 11
Демонстрация примера работы с MAT
Friday, July 1, 11
Friday, July 1, 11
Friday, July 1, 11
Оптимизация скорости работы приложения
Поиск узких мест в приложении
Оптимизация пользовательских элементов управления
Friday, July 1, 11
Поиск «узких» мест в приложении
Утилиты:
TraceviewРежим StrictMode
Friday, July 1, 11
Использование Traceview из Eclipse
Friday, July 1, 11
Использование 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
Режим StrictMode
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
Friday, July 1, 11
Friday, July 1, 11
…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
Оптимизация пользовательских элементов
Утилиты
hierarchyviewer layoutopt
Friday, July 1, 11
<?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
Friday, July 1, 11
<?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
Friday, July 1, 11
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
Спасибо за внимание!
ул. Михайловская 25Одесса 65005, Украинаwww.softtechnics.biz
Friday, July 1, 11