Ho un servizio che viene utilizzato/rilegato in molteplici attività (con cura lo ha scritto in modo che un'attività sarà sciogliere prima di un altro si lega, in onPause/onResume). Tuttavia, ho notato un membro del servizio non si attacchi ....servizio di Android non sta funzionando come un Singleton
Attività 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
Attività 2:
bindService(); // a different one than activity 1
int dlSize = mService.getQueue().size(); // always returns 0 (wrong)
Codice del Servizio:
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;
}
}
Cambiando una cosa - rendendo la variabile downloadItems del servizio in una statica - tutto funziona perfettamente. Ma doverlo fare mi preoccupa; Non ho mai usato un singleton in questo modo prima d'ora. È questo il modo corretto di usare uno di questi?
Chiamate startService() ovunque nelle vostre attività? Ciò consente al servizio di rimanere in vita come un singelton. Altrimenti sarà distrutto quando l'attività ad essa legata viene distrutta. – Nospherus
@Nospherus Aggiungerò ciò che ho fatto a breve - tl; dr fa "bindService" funziona altrettanto bene come "startService()"? –
No. Devi chiamare sia startService() che bindService(). Se chiami solo bindService(), il servizio morirà non appena lo si slega. Chiamando startService(), rimarrà attivo finché non si chiama stopService() (o stopSelf() all'interno del servizio). – Nospherus