Amélia Pessoa

Android
Dicas de Performance
Agenda
Dicas de Uso
Tipos de dados em Java
Proguard
Otimizações no SQLite
StringBuilder, StringBuffer e String
Collections

Amélia Pessoa
Não faça mais do que o
necessário

Amélia Pessoa
Não use memória se não há
necessidade
byte = inteiro com sinal (1 byte)
short = inteiro com sinal (2 bytes)
int = inteiro com sinal (4 bytes)
long = inteiro com sinal (8 bytes)
float = ponto flutuante (4 bytes)
double = ponto flutuante (8 bytes)
char = caractere (2 bytes)
boolean = true ou false (1 bit)
String = Uma seqüência de caracteres

Amélia Pessoa
Conheça bem as bibliotecas

Amélia Pessoa
Evite métodos Getters e Setters

Amélia Pessoa
Proguard
# To enable ProGuard to shrink and obfuscate your code, uncomment this
(available properties: sdk.dir, user.home):
proguard.config=proguard.cfg
-optimizationpasses 5
-allowaccessmodification
-optimizations !code/simplification/arithmetic,!field/*,!
class/merging/*,!code/allocation/variable
-keepattributes *Annotation*
-keep
-keep
-keep
-keep
-keep

public
public
public
public
public

Amélia Pessoa

class
class
class
class
class

*
*
*
*
*

extends
extends
extends
extends
extends

android.app.Activity
android.app.Application
android.app.Service
android.content.BroadcastReceiver
android.content.ContentProvider
Utilize a sintaxe de loop for
aprimorada
public void loop1() {
int soma = 0;
for (int i = 0; i < testArray.length; ++i) {
soma += testArray[i].valor;
}
}
public void loop2() {
int soma = 0;
Test [] localArray = testArray;
int len = localArray.length;
for (int i = 0; i < len; ++i) {
soma += localArray[i].valor;
}
}
public void loop3() {
int soma = 0;
for (Test a : testArray) {
soma += a.valor;
}
}
Amélia Pessoa
Use o banco da melhor forma

Amélia Pessoa
Use indexes
CREATE TABLE mytable (
a TEXT PRIMARY KEY, -- index created
b INTEGER,
c TEXT UNIQUE
-- index created
);
CREATE INDEX statement...

Amélia Pessoa
Não use length() em strings
longas
Exemplos:
Troque (WHERE length(str)=0) por (WHERE str='');
(WHERE length(str)==3) pode ser (WHERE str LIKE '___').

Amélia Pessoa
Use IN ao invés de OR
"x IN ('A', 'B')"
Ao invés de "x='A' OR x='B'"

Amélia Pessoa
Mais...
Use LIMIT e OFFSET;
Use TRIGGERs.

Amélia Pessoa
StringBuilder, StringBuffer e String
Imutável!!!
String s = "estou " ;
s += "concatenando ";
s += "strings!";
StringBuilder builder = new StringBuilder();
builder.append("estou ");
builder.append("concatenando ");
builder.append("strings!");
System.out.println(builder.toString());

Amélia Pessoa
Escreva aplicações multithread

Amélia Pessoa
Utilize a collection certa para
cada problema

Amélia Pessoa
Set
HashSet: Sem nenhuma sequência ou ordenação. Essa coleção é usada
para elementos não-duplicados e a ordem não importa.
LinkedHashSet: é uma Hashset com ordenação natural, ou seja, ao inserir
na lista e depois iterá-la a ordem é mantida.
TreeSet: é um Set com ordenação natural ou especificada. Comumente, se
usa elementos com Comparable ou Comparator, para se inserir já de
maneira ordenada. Internamente, a TreeSet usa e estrutura de árvore.

Amélia Pessoa
List
ArrayList: Como o nome já diz, é uma abstração de um array. Tem rápida
iteração e rápido acesso rândomico. Os seus elementos possuem uma
sequência natural por índice, porém essa coleção não é ordenada.
Implementa java.util.List e extende de java.util.Collection.
Vector: Igual a ArrayList em todos os sentidos, exceto que suas operações
são mais custosas (lentas), pois todos seus métodos são sincronizados. Ou
seja, ela é thread-safe.

Amélia Pessoa
List / Queue
LinkedList: Possui seus elementos em sequência por índice, porém seus
elementos são duplamente encadeados uns aos outros. Logo, é fácil inserir
e remover do ínicio ao fim dessa coleção. Escolha em casos onde é preciso
inserir e deletar rapidamente registros. Porém, a iteração é um pouco mais
lenta do que comparado ao ArrayList. Implementa a interface Queue
também.
PriorityQueue: É uma Queue de prioridades. Os elementos são inseridos
com ordenação natural ou especificada dado por um Comparable ou
Comparator.

Amélia Pessoa
Map
HashMap: Mapeamento chave-valor, sem ordenação nenhuma. Aceita uma
chave nula, e múltiplos elementos nulos.
Hashtable: é a HashMap com duas diferenças: é thread-safe, e não possui
elementos e nem chaves nulos.
LinkedHashMap: similar ao LinkedHashSet é um HashMap com
ordenação natural. Possui mais rápida iteração, porém nas operações de
inserir e remover será mais lenta. Possui opção de ordenação natural ou
LRU (por último acessado) em seu construtor.
TreeMap: similar a TreeSet, é um Map com ordenação natural (caso um
Comparable ou Comparator não seja especificado).

Amélia Pessoa

Android - Dicas de Performance

  • 1.
  • 2.
    Agenda Dicas de Uso Tiposde dados em Java Proguard Otimizações no SQLite StringBuilder, StringBuffer e String Collections Amélia Pessoa
  • 3.
    Não faça maisdo que o necessário Amélia Pessoa
  • 4.
    Não use memóriase não há necessidade byte = inteiro com sinal (1 byte) short = inteiro com sinal (2 bytes) int = inteiro com sinal (4 bytes) long = inteiro com sinal (8 bytes) float = ponto flutuante (4 bytes) double = ponto flutuante (8 bytes) char = caractere (2 bytes) boolean = true ou false (1 bit) String = Uma seqüência de caracteres Amélia Pessoa
  • 5.
    Conheça bem asbibliotecas Amélia Pessoa
  • 6.
    Evite métodos Getterse Setters Amélia Pessoa
  • 7.
    Proguard # To enableProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): proguard.config=proguard.cfg -optimizationpasses 5 -allowaccessmodification -optimizations !code/simplification/arithmetic,!field/*,! class/merging/*,!code/allocation/variable -keepattributes *Annotation* -keep -keep -keep -keep -keep public public public public public Amélia Pessoa class class class class class * * * * * extends extends extends extends extends android.app.Activity android.app.Application android.app.Service android.content.BroadcastReceiver android.content.ContentProvider
  • 8.
    Utilize a sintaxede loop for aprimorada public void loop1() { int soma = 0; for (int i = 0; i < testArray.length; ++i) { soma += testArray[i].valor; } } public void loop2() { int soma = 0; Test [] localArray = testArray; int len = localArray.length; for (int i = 0; i < len; ++i) { soma += localArray[i].valor; } } public void loop3() { int soma = 0; for (Test a : testArray) { soma += a.valor; } } Amélia Pessoa
  • 9.
    Use o bancoda melhor forma Amélia Pessoa
  • 10.
    Use indexes CREATE TABLEmytable ( a TEXT PRIMARY KEY, -- index created b INTEGER, c TEXT UNIQUE -- index created ); CREATE INDEX statement... Amélia Pessoa
  • 11.
    Não use length()em strings longas Exemplos: Troque (WHERE length(str)=0) por (WHERE str=''); (WHERE length(str)==3) pode ser (WHERE str LIKE '___'). Amélia Pessoa
  • 12.
    Use IN aoinvés de OR "x IN ('A', 'B')" Ao invés de "x='A' OR x='B'" Amélia Pessoa
  • 13.
    Mais... Use LIMIT eOFFSET; Use TRIGGERs. Amélia Pessoa
  • 14.
    StringBuilder, StringBuffer eString Imutável!!! String s = "estou " ; s += "concatenando "; s += "strings!"; StringBuilder builder = new StringBuilder(); builder.append("estou "); builder.append("concatenando "); builder.append("strings!"); System.out.println(builder.toString()); Amélia Pessoa
  • 15.
  • 16.
    Utilize a collectioncerta para cada problema Amélia Pessoa
  • 17.
    Set HashSet: Sem nenhumasequência ou ordenação. Essa coleção é usada para elementos não-duplicados e a ordem não importa. LinkedHashSet: é uma Hashset com ordenação natural, ou seja, ao inserir na lista e depois iterá-la a ordem é mantida. TreeSet: é um Set com ordenação natural ou especificada. Comumente, se usa elementos com Comparable ou Comparator, para se inserir já de maneira ordenada. Internamente, a TreeSet usa e estrutura de árvore. Amélia Pessoa
  • 18.
    List ArrayList: Como onome já diz, é uma abstração de um array. Tem rápida iteração e rápido acesso rândomico. Os seus elementos possuem uma sequência natural por índice, porém essa coleção não é ordenada. Implementa java.util.List e extende de java.util.Collection. Vector: Igual a ArrayList em todos os sentidos, exceto que suas operações são mais custosas (lentas), pois todos seus métodos são sincronizados. Ou seja, ela é thread-safe. Amélia Pessoa
  • 19.
    List / Queue LinkedList:Possui seus elementos em sequência por índice, porém seus elementos são duplamente encadeados uns aos outros. Logo, é fácil inserir e remover do ínicio ao fim dessa coleção. Escolha em casos onde é preciso inserir e deletar rapidamente registros. Porém, a iteração é um pouco mais lenta do que comparado ao ArrayList. Implementa a interface Queue também. PriorityQueue: É uma Queue de prioridades. Os elementos são inseridos com ordenação natural ou especificada dado por um Comparable ou Comparator. Amélia Pessoa
  • 20.
    Map HashMap: Mapeamento chave-valor,sem ordenação nenhuma. Aceita uma chave nula, e múltiplos elementos nulos. Hashtable: é a HashMap com duas diferenças: é thread-safe, e não possui elementos e nem chaves nulos. LinkedHashMap: similar ao LinkedHashSet é um HashMap com ordenação natural. Possui mais rápida iteração, porém nas operações de inserir e remover será mais lenta. Possui opção de ordenação natural ou LRU (por último acessado) em seu construtor. TreeMap: similar a TreeSet, é um Map com ordenação natural (caso um Comparable ou Comparator não seja especificado). Amélia Pessoa