Salut,

Je me demande, lorsqu'on fait un service utilisant un BInder, où doit se trouver le code des méthodes du service ? Dans la classe qui hérite de Binder, ou dans celle qui hérite du Service.

Dans le premier cas, ça me semble étrange que le Service en lui-même n'ait aucune méthode :
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
public class MyBoundService extends Service {
 
	private MyBinder myBinder = new MyBinder();
	private Random random = new Random();
 
	public class MyBinder extends Binder {
		public int random() {
			return random.nextInt(100);
		}
	}
 
	@Override
	public IBinder onBind(Intent intent) {
		return myBinder;
	}
 
}
Dans le second cas, ça veut dire qu'il faut que le Binder déléguer toutes les méthodes du Service :
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
19
20
21
public class MyBoundService extends Service {
 
	private MyBinder myBinder = new MyBinder();
	private Random random = new Random();
 
	public class MyBinder extends Binder {
		public int random() {
			return MyBoundService.this.random();
		}
	}
 
	@Override
	public IBinder onBind(Intent intent) {
		return myBinder;
	}
 
	public int random() {
		return random.nextInt(100);
	}
 
}
Dans un tel exemple, le Service et le Binder me semblent un peu redondants : pourquoi faut-il deux classes, au lieu de retourner directement le Service ? Pourquoi un tel choix de conception dans Android ? (je ne remets pas en cause, il doit y avoir une bonne raison, mais j'aimerais la connaître pour mieux comprendre)

Quelles sont alors les bonnes pratiques pour écrire les méthodes d'un tel service ?

Merci de votre réponse.