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

Preview:

DESCRIPTION

Antonenko V., Android developer at SoftTechnics

Citation preview

Использование 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