J'essaie d'éviter d'exécuter des tâches en double sur un Service en utilisant une Map synchronisée dans onStartMethod, puis en vérifiant qu'une clé n'est pas déjà stockée. Cependant, jusqu'ici ne fonctionne pas, il exécute la même chose deux fois si j'appelle démarrer le service deux fois assez tôt.Mappage synchronisé dans le service onStartCommand
public void onCreate() {
SYNCED_TABLES = Collections.synchronizedMap(new Hashtable<>());
}
public int onStartCommand(Intent intent, int flags, int startId) {
synchronized (SYNCED_TABLES){
if(!SYNCED_TABLES.containsKey(intent.getStringExtra(KEY))){
SYNCED_TABLES.put(intent.getStringExtra(KEY), true);
/* Do stuff on a Handler thread */
}
else{
Log.d(TAG, "Tried to execute the same task twice " + intent.getStringExtra(KEY));
}
}
}
Pourquoi ne pas simplement utiliser un IntentService? – Submersed
Le travail effectué dans le gestionnaire de thread est une demande de publication sur un serveur. Nous voulons faire les demandes multithread (il y a plusieurs bases de données différentes) – Julio