ПОЛЬЗОВАТЕЛЬ ТОЧНО ОЦЕНИТ!
Повышение производительности
мобильных приложений
Руслан Трошков,
старший разработчик мобильных
приложений
troshkov.ruslan@gmail.com
Traceview
Calls + Recur Calls / Total
количество вызовов
+ рекурсивные вызовы
CPU Time / Call
Время, потраченное
на вызов метода
Real time / Call
 
Реальное время для каждого
вызова метода приложения
@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;
}
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!!! -----------
CPU GPU
Иерархия представления:
Большая вложенность
Слишком много элементов
Перерисовка ( Overdraw )
RelativeLayout — 2
LinearLayout + weight — 2
LinearLayout — 1
FrameLayout — 1
...
<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"/>
...
Убираем лишний background
?
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 — уникальное значение
61416
60000120
Sizeof Shallow Size
559
500
18834092
18806820
Heap Count Retained Size
VacancyRecyclerAdapterSVacancyRecyclerViewHolder
559
500(ru.superjob.client.android.adapters)
adapters
Class Name Total Count
Heap Dump
...
LeakCanary

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