J'ai un service qui est utilisé/lié dans plusieurs activités (je l'ai écrit avec soin pour qu'une activité le délie avant qu'une autre se lie, dans onPause/onResume). Cependant, j'ai remarqué un membre du service ne colle pas ....Le service Android ne fonctionne pas en tant que singleton
Activité 1:
private void bindService() {
// Bind to QueueService
Intent queueIntent = new Intent(this, QueueService.class);
bindService(queueIntent, mConnection, Context.BIND_AUTO_CREATE);
}
...
bindService();
...
mService.addItems(downloads); // the initial test adds 16 of them
Activité 2:
bindService(); // a different one than activity 1
int dlSize = mService.getQueue().size(); // always returns 0 (wrong)
Code de service:
public class QueueService extends Service {
private ArrayList<DownloadItem> downloadItems = new ArrayList<DownloadItem();
// omitted binders, constructor, etc
public ArrayList<DownloadItem> addItems(ArrayList<DownloadItem> itemsToAdd) {
downloadItems.addAll(itemsToAdd);
return downloadItems;
}
public ArrayList<DownloadItem> getQueue() {
return downloadItems;
}
}
En changeant une chose - en transformant la variable downloadItems du service en une variable statique - tout fonctionne parfaitement. Mais avoir à le faire m'inquiète; Je n'ai jamais utilisé un singleton de cette façon auparavant. Est-ce la bonne méthode pour utiliser l'un d'eux?
Appelez-vous startService() n'importe où dans vos activités? Cela permet au service de rester en vie comme un singelton. Sinon, il sera détruit lorsque l'activité qui lui est liée est détruite. – Nospherus
@Nospherus Je vais ajouter ce que j'ai fait sous peu - tl; dr "bindService" fonctionne-t-il aussi bien que "startService()"? –
Non. Vous devez appeler startService() et bindService(). Si vous n'appelez que bindService(), le service mourra dès que vous l'aurez dissocié. En appelant startService(), il restera actif jusqu'à ce que vous appeliez stopService() (ou stopSelf() dans le service). – Nospherus