Comment puis-je annuler toutes les intentions qui sont en attente pour le service mis en attente intention

StackOverflow https://stackoverflow.com/questions/8358190

  •  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
}
Était-ce utile?

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.

  1. Copiez le code IntentService pour faire vos propres modifications à ce qui vous permettra de supprimer les messages en attente. On dirait que quelqu'un a eu un certain succès avec cette ici:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top