Effective Java for
Mobile
Кирилл Розов
Ограничения мобильных
устройств
• Процессор
• RAM
• Память
• Батарейка
• Нестабильный сигнал
Используйте отложенное (lazy)
получение сложных данных,
только в тот момент когда они
вам понадобятся
Используйте кэш для
результатов сложных вычислений
которые понадобятся вам
несколько раз
Избегайте создание
ненужных объектов
Лучше использовать массив
данных примитивного типа,
чем массив типов-оберток
Лучше используйте
static вместо virtual
Избегайте
использование Getter-ов/
Setter-ов внутри классов
Без JIT доступ к полям напрямую в 3
раза быстрее

С JIT - в 7 раз
public class Foo {

private class Inner {

void stuff() { Foo.this.doStuff(Foo.this.mValue); }

}



private int mValue;



public void run() {

Inner in = new Inner();

mValue = 27;

in.stuff();

}



private void doStuff(int value) {

System.out.println("Value is " + value);

}

}
Используйте
модификатор доступа по
умолчанию вместо
private в случае когда
происходит обращения к
элементам из
внутренних классов
List<String> strings =
Arrays.asList("one", "two", "three");



// Indexed for

for (int i = 0; i < strings.size(); i++) {

System.out.println(strings.get(i));

}



// Optimized indexed for

for (int i = 0, count = strings.size(); i < count; i++) {

System.out.println(strings.get(i));

}



//Iterator

for (String item : strings) { System.out.println(item); }



//Collection Stream API

strings.forEach(System.out::println);
Старайтесь не
использовать
рефлексию
Не создавайте объекты
в интенсивно
вызываемом коде
Старайтесь отложить задачи
когда устройство будет иметь
больше ресурсов в своем
распоряжение

Effective Java