Bonjour à tous,
En lisant le tuto : "Utiliser les services sous Android", je me pose la question suivante:
1) dans quel cas est-il pertinent d'utiliser des classes internes lorsque se pose la question de la performance?
Je me demande donc si la question de la performance entre en jeu par exemple entre l'utilisation d'une classe interne ou la déclaration d'une nouvelle classe externe.
Pour revenir au tuto sur les services, l'auteur (Nicolas Druet) y crée deux interfaces, l'une pour le service et l'autre pour l'activité.
Le service implémente l'interface IService et l'activité utilise ce qui me semble être une classe interne implémentant l'interface IBackgroundServiceListener :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
final IBackgroundServiceListener listener = new IBackgroundServiceListener() { 
    public void dataChanged(final Object data) { 
        MyActivity.this.runOnUiThread(new Runnable() { 
            public void run() { 
                // Mise à jour de l'UI  
            } 
        }); 
    } 
};
2) S'agit-il bien d'une classe interne?
Est-il équivalent de procéder comme ci-dessous : je déclare une classe interne que j'initialiserai dans le code.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
public class BackgroundServiceListener implements IBackgroundServiceListener{
        public void dataChanged(Object o) {
                  MyActivity.this.runOnUiThread(new Runnable(){
                         public void run(){
					// Mise à jour de l'Ui
				}
			});
        }
}

3) Est-il pertinent que l'activité implémente directement l'interface IBackgroundServiceListener, en redéfinissant les méthodes concernées?
Il me semble que cela dépend de ce qui se passe ici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
ServiceConnection connection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName name, IBinder service) { 
        Log.i("BackgroundService", "Connected!"); 
        IBackgroundService service = ((BackgroundServiceBinder)service).getService(); 
        service.addListener(listener); 
    }
}
Donc, que se passe t'il si, au lieu de passer un IBackgroundServiceListener en listener à la méthode addListener, mon Activity implémente l'interface IBackgroundServiceListener et la méthode addListener prend en argument (IBackgroundServiceListener)MyActivity.this ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MyActivity extends Activity implements IBackgroundServiceListener{
    ...
    public void dataChanged(Object o) {
             MyActivity.this.runOnUiThread(new Runnable(){
                         public void run(){
					// Mise à jour de l'Ui
				}
			});
    }
    ...
    ServiceConnection connection = new ServiceConnection() { 
            public void onServiceConnected(ComponentName name, IBinder service) { 
                   Log.i("BackgroundService", "Connected!");
                   IBackgroundService service = ((BackgroundServiceBinder)service).getService();
                   service.addListener((IBackgroundServiceListener)MyActivity.this); 
    }
}
4) Est-ce tout l'objet MonActivity.this qui est passé à la méthode addListener, ou seulement la partie de MyActivity concernant l'implémentation de l'interface IBackgroundServiceListener? Cette question me semble importante, étant donné que le listener passé en argument de addListener sera enregistré dans une ArrayList<IBackgroundServiceListener> listeners, ce qui pourrait générer de l'occupation mémoire superflue et des longueur dans la manipulation des éléments de l'ArrayList si ces derniers sont des Activity toutes entières? :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public void addListener(IBackgroundServiceListener listener) {  
        if(listeners == null){  
            listeners = new ArrayList<IBackgroundServiceListener>();  
        }  
        listeners.add(listener);  
}

Merci d'avance à tous