Dans cette article nous allons revoir notre façon d’écrire du code Java lorsqu’il s’agit d’une application Android, il s’agit ici de la deuxième partie.

Interface ? Une interface définit un comportement (d’une classe) qui doit être implémenté par une classe, sans implémenter ce comportement. C’est un ensemble de méthodes abstraites, et de constantes. Certaines interfaces ( CloneableSerializable, …) sont dites interfaces de «balisage» : elle n’imposent pas la définition d’une méthode, mais indiquent que les objets qui les implémentent ont certaines propriétés. [les java-hist se reconnaissent dans leurs interfaces ]

bref, une question d’interface ou d’implémentation ? Avec Android il est bon de ménager l’appareil dès qu’on le peut, l’utilisation des implémentations dans la déclaration plutôt que les interfaces

PAS BIEN !

List<String> list = new ArrayList<String>();

BIEN !

 
ArrayList<String> list = new ArrayList<String>(); 

Gérer la mémoire ? réduire les instanciations d’objet, COMMENT PROCÉDONS NOUS POUR
FAIRE LE MOINS D’INSTANCIATIONS ?

==> Le coup de coeur pour les variables static

L’utilisation de variables statiques permet d’économiser des
instanciations.

Exemple

public long somme(int left, int top, int right, int bottom) {        return somme(new Rect(left, top, right, bottom));    
}
public abstract long somme(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);

==> Réutiliser ses objets

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);
    }

==> VIEWHOLDER, Réutilisation des views.
pattern de réutilisabilité des vues

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;
    }

Illustration en image

==> CHAINES DE CARACTERES

Préférez le StringBuffer aux concaténations de chaines !
Pensez aussi à référencer 1 fois les chaines de caratères
de vos vues si elles sont statiques.

Pas bien! Un arbre de layout trop compliqué va instancier
beaucoup d’objets !

Nous allons poursuivre avec d’autres bonnes pratiques, ce qu’il faut faire et ne pas faire.

Post Navigation