Frage

Ich habe einen Absichtserservice, der vom Benutzer und von meiner App automatisch befragt wird. Ich muss in der Lage sein, alle ausstehenden Absichten zu töten, die bedeckt sind, wenn sich der Benutzer aus meiner Anwendung abzeichnet, aber ich kann das nicht zum Laufen bringen. Ich habe gestoppService () und stopself () ausprobiert, aber die Absichten schießen weiterhin von dem Inventservice ab, nachdem sich der Benutzer abgemeldet hat. Ich würde versuchen, die ID der Absicht zu erhalten, aber das ist schwierig, da jedes Mal, wenn der Inspektservice beginnt, die Variable, die die Absichts -ID hält, leer ist. Hier ist mein Inspektservice -Code:

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
}
War es hilfreich?

Lösung

Leider denke ich nicht, dass es möglich ist, dies mit den Standard -Inventservice -Methoden zu erreichen, da es keine Möglichkeit bietet, es zu unterbrechen, während es bereits geht.

Ich kann mir vorstellen, dass Sie versuchen können, zu sehen, ob sie zu Ihren Bedürfnissen passen.

  1. Kopieren Sie den Inspektservice -Code, um Ihre eigenen Änderungen vorzunehmen, mit denen Sie anhängige Nachrichten entfernen können. Sieht so aus, als hätte hier jemand Erfolg mit diesem: Android: Inventservice, wie eine Aufgabe in der Handlungswarteschlange abbrechen oder überspringen
  2. Anstatt alle Inspektservice -Code zu kopieren, können Sie möglicherweise auch wie einen normalen Dienst daran binden (da InNtentService Service erweitert), damit Sie Ihre eigene Funktion schreiben können, um anhängige Nachrichten zu entfernen. Dieser wird auch in diesem Link erwähnt.
  3. Schreiben Sie stattdessen den Inspektservice als regulären Service neu. Mit dieser Option haben Sie mehr Kontrolle über das Hinzufügen und Entfernen von Nachrichten.

Ich hatte eine ähnliche Situation, in der ich einen Inspektservice benutzte, und ich habe sie schließlich stattdessen nur in einen Dienst umgewandelt. Das ließ mich die Aufgaben gleichzeitig ausführen und stornieren sie auch, wenn ich sie klären musste.

Andere Tipps

HierWann sollte ich die nativen (Android NDK) Handles befreien? ist der HangAroundIntentService Klasse, die die Methode hat cancelQueue(). Die Klasse hat auch die Methode

public static Intent markedAsCancelIntent(Intent intent)

Das verwandelt eine Absicht in eine Abbrechenabsicht und

public static boolean isCancelIntent(Intent intent).

Die Klasse basiert auf dem Code von Open-Sourced Google.

Nur ein Gedanke, aber in Ihrem Vorhanden können Sie ein Argument haben, das überprüft, ob App ausgeführt wird, wenn nicht, dann den Code nicht ausführen? Beispiel. Zu Beginn Ihrer App könnten Sie einen statischen VAR haben

boolean appRunning;

Als nächstes in Ihrem Voraus der Absicht, wenn Sie die Genehmigung nach einer Onpause oder OneDestroy of Activity auf False festlegen, können Sie den Leitungscode in einem Booleschen Code einwickeln:

 protected void onHandleIntent(final Intent intent) {
     if(MainActivity.appRunning){
       ...
     }
}

Nur ein Gedanke

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top