Tout ce qu’on croit savoir est faux ;)
Integer result = 1;
for (int i = 0; i < 10; i++){
result += i;
}
return result;
Reviens à :
Integer result = new Integer(1);
for (int i = 0; i < 10; i++){
result = new Integer(i + result.intValue());
}
return result.intValue();
Il est donc préférable d’utiliser au maximum des types primitifs !
Attention cependant dans l’utilisation des types primitifs pour les nombres :
Les entiers sont en caches de -128 à 127
Sorte de HashMap avec des clés "entiers" dont l’ojbectif est d'éviter l’auto boxing
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(550,"Echo");
map.put(551,"Echo");
map.get(550);
donne
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(new Integer(550),"Echo");
map.put(new Integer(551),"Echo");
map.get(new Integer(550));
avec les sparseArray : pas d’auotboxing !
SparseArray<String> map = new SparseArray<String>();
map.put(550,"Echo");
map.put(551,"Echo");
map.get(550);
Gère aussi Booléens, Int en natif. La clé reste un entier !
Utilisation des implémentatins dans la déclaration plutôt que les interfaces.
List<String> list = new ArrayList<String>();
est à remplacer par
ArrayList<String> list = new ArrayList<String>();
On fait ça pour ménager la compilation
public long doSomeStuff(int left, int top, int right, int bottom){
return stuff(new Rect(left, top, right, bottom));
}
public abstract long stuff(Rect rect);
On peut faire mieux !
private static final Rect rect = new Rect();
public long doSomeStuff(int left, int top, int right, int bottom){
rect.set(left, top, right, bottom);
return stuff(rect);
}
public abstract long stuff(Rect rect);
private static final int MSG_ANIMATION_FRAME = 0xcafe;
public void sendMessage(Handler handler, Object userInfo){
final Message message = new Message();
message.what = MSG_ANIMATION_FRAME;
message.obj = userInfo;
handler.sendMessage(message);
}
Peut être remplacé par
private static final int MSG_ANIMATION_FRAME = 0xcafe;
public void sendMessage(Handler handler, Object userInfo){
final Message message = Message.obtain();
message.what = MSG_ANIMATION_FRAME;
message.obj = userInfo;
handler.sendMessage(message);
}
PAS BIEN !
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// Change the icon for Windows and iPhone
String s = values[position];
if (s.startsWith("iPhone")) {
imageView.setImageResource(R.drawable.no);
} else {
imageView.setImageResource(R.drawable.ok);
}
return rowView;
}
BIEN !
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = null;
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.rowlayout, parent, false);
}else{
rowView = convertView;
}
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// Change the icon for Windows and iPhone
String s = values[position];
if (s.startsWith("iPhone")) {
imageView.setImageResource(R.drawable.no);
} else {
imageView.setImageResource(R.drawable.ok);
}
return rowView;
}
L'utilisation des balises merges et includes se révèle fort utile.
Utiliser les balises merges pour réutiliser des layouts
Il vaut mieux faire n petits téléchargement ou 1 gros ?
Un seul !
Reto Meier Google IO 2012 : à partir de 20:00
On passe les détails mais ça économise la batterie avec les ouvertures de connexions.
Utilisation d'une base de données.
a utilser bien sur si cela est possible ;)
Ne pas bloquer le thread UI
Ne pas bloquer le thread UI
Nous sommes sur des réseaux téléphoniques pas toujours fournis en 4G, donc il faut ménager le poids de nos applications !
Ne pas hésiter non plus à créer programatiquement des drawables La partie du bas permet de définir la zone où mettre le contenu !
Dans playservice, on va trouver des choses commes mapssV2, la sécurisation des apps
Oui mais pas trop en fait… car pb d’héritage pb avec Maven, …
@gdgnantes / @binomed