14
ПОЛЬЗОВАТЕЛЬ ТОЧНО ОЦЕНИТ! Повышение производительности мобильных приложений Руслан Трошков, старший разработчик мобильных приложений [email protected]

Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

  • Upload
    ontico

  • View
    111

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

П ОЛ Ь З О В АТ Е Л Ь ТО Ч Н О О Ц Е Н И Т!

Повышение производительности мобильных приложений

Руслан Трошков, старший разработчик мобильных приложений[email protected]

Page 2: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)
Page 3: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

Traceview

Calls + Recur Calls / Total количество вызовов + рекурсивные вызовы

CPU Time / Call Время, потраченное на вызов метода

Real time / Call Реальное время для каждого вызова метода приложения

Page 4: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

@Around("(anyMethod())")public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable { . . . MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); String className = methodSignature.getDeclaringType().getSimpleName(); String methodName = methodSignature.getName(); StopWatch stopWatch = new StopWatch();

stopWatch.start(); result = joinPoint.proceed(); stopWatch.stop();

long time = stopWatch.getTotalTimeMillis(); Log.d(TAG_METHOD_PROFILE, buildLogMessage(className+"."+methodName, time));

. . .

return result;}

Page 5: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

D/methodProfile: Время выполнения --> BaseModel.setState --> [5ms]

D/methodProfile: Время выполнения --> ObserverWrapperFragment.update --> [2ms]

D/methodProfile: Время выполнения --> BaseModel.setStateWithLabel --> [3ms]

D/methodProfile: Время выполнения --> SaveObjectHelper.saveData --> [4ms]

D/methodProfile: Время выполнения --> SaveObjectHelper.saveAuthType --> [4ms]

D/methodProfile: Время выполнения --> Auth.saveAuthData --> [11ms] <------------Achtung!!! -----------

Page 6: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

CPU GPU

Иерархия представления: Большая вложенностьСлишком много элементов

Перерисовка ( Overdraw )

Page 7: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)
Page 8: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

RelativeLayout — 2

LinearLayout + weight — 2

LinearLayout — 1

FrameLayout — 1

Page 9: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

. . .<ViewStub android:id="@+id/warningContainerViewStub" android:layout_width="match_parent" android:layout_height="wrap_content" android:inflatedId="@+id/warningContainerInflateOverlay" android:layout="@layout/view_stub_warning_container"/>

. . .

Page 10: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

Убираем лишний background

Page 11: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

?

Page 12: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

public class VacancyRecyclerAdapter extends HeaderRecyclerViewAdapter implements Observer{

public static final int ID_PANEL_ADD_SUBSCRIPTION = -100; public static final int ID_HEADER_NEW_VACANCY = -101; public static final int ID_HEADER_OLD_VACANCY = -102; . . .

@Override public int getItemViewType(int position) { VacanciesType.VacancyType vacancyType = getItem(position); return vacancyType.id; }

. . .}

vacancyType.id — уникальное значение

Page 13: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

61416

60000120

Sizeof Shallow Size559

500

18834092

18806820

Heap Count Retained Size

VacancyRecyclerAdapterSVacancyRecyclerViewHolder

559

500(ru.superjob.client.android.adapters)

adaptersClass Name Total Count

Heap Dump

. . .

Page 14: Пользователь точно оценит! Повышение производительности мобильных приложений / Руслан Трошков (Superjob)

LeakCanary