Comment puis-je annuler toutes les intentions qui sont en attente pour le service mis en attente intention
-
27-10-2019 - |
Question
J'ai un intentservice qui obtient Qued par l'utilisateur et par mon application automatiquement. Je dois être capable de tuer toutes les intentions qui sont en attente Qued lorsque l'utilisateur se déconnecte de ma demande, mais je ne peux pas sembler obtenir ce travail. J'ai essayé stopservice () et stopself (), mais les intentions de continuer à tirer au large de la intentservice après que l'utilisateur a déconnecté. Je voudrais essayer d'obtenir l'id de l'intention, mais qui est difficile que chaque fois que le démarrage de intentservice, la variable qui contient de l'ID intention est vide. Voici mon code intentservice:
public class MainUploadIntentService extends IntentService {
private final String TAG = "MAINUPLOADINTSER";
private GMLHandsetApplication app = null;
private SimpleDateFormat sdf = null;
public boolean recStops = true;
public MainUploadIntentService() {
super("Main Upload Intent Service");
GMLHandsetApplication.writeToLogs(TAG,
"GMLMainUploadIntentService Constructor");
}
@Override
protected void onHandleIntent(Intent intent) {
GMLHandsetApplication.writeToLogs(TAG, "onHandleIntent Started");
if (app == null) {
app = (GMLHandsetApplication) getApplication();
}
uploadData(app);
GMLHandsetApplication.writeToLogs(TAG, "onHandleIntent Finished");
}
@Override
public void onDestroy() {
GMLHandsetApplication.writeToLogs(TAG, "onDestroy Started");
app = null;
stopSelf();
GMLHandsetApplication.writeToLogs(TAG, "onDestroy completed");
}
public void uploadData(GMLHandsetApplication appl) {
//All of my code that needs to be ran
}
La solution
Malheureusement, je ne pense pas qu'il est possible d'accomplir cela avec les méthodes standard de IntentService car il ne propose pas un moyen d'interrompre alors qu'il va déjà.
Il y a quelques options que je peux penser que vous pouvez essayer de voir si elles correspondent à vos besoins.
Autres conseils
Ici
Quand dois-je libérer les poignées native (Android NDK)? est la classe de HangAroundIntentService
qui a la méthode cancelQueue()
.
La classe a aussi la méthode
public static Intent markedAsCancelIntent(Intent intent)
qui convertit une intention en une intention d'annuler, et
public static boolean isCancelIntent(Intent intent)
.
La classe est basée sur le code de Google open source.
Juste une pensée mais à l'intérieur de votre onhandleintent pouvez-vous avoir un argument qui vérifie si l'application est en marche sinon, ne courez pas le code? exemple. Au début de votre application, vous pouvez avoir un var statique
boolean appRunning;
Ensuite dans votre onhandle l'intention, lorsque vous définissez la appRunning false, après une OnPause ou OnDestroy d'activité, vous pouvez envelopper le code onhandleintent dans un booléen:
protected void onHandleIntent(final Intent intent) {
if(MainActivity.appRunning){
...
}
}
Juste une pensée