2012-04-12 25 views
1

OK, ich habe dieses Problem für eine kleine Weile erforscht und ich habe keine gute Antwort gefunden. Ich habe eine asynctask, die überprüft, ob es ein Update für meine db über einen Web-Service gibt. Ich möchte nur einmal pro Benutzersitzung in meiner App überprüfen (jetzt überprüft es jedes Mal, wenn ich zurück zum Hauptbildschirm komme). Wenn ich also die App schließe und der Prozess gestoppt wird und sie ihn wieder öffnen, wird der Webdienst erneut überprüft.Android: Führen Sie asynctask einmal pro Sitzung

Ich habe gelesen über die Verwendung von gemeinsamen Vorlieben, aber ich kann nur daran denken, dass zum ersten Mal überhaupt die App ausgeführt wird.

Ich dachte darüber nach, einen Zeitstempel in meinen freigegebenen Einstellungen zu speichern und dann zu überprüfen, ob seit meinem letzten Zeitstempel mehr als 30 Minuten vergangen sind. Aber das scheint kompliziert zu sein für das, was ich brauche.

Irgendwelche Ideen da draußen?

Antwort

3

Gemeinsame Vorlieben ist eigentlich sehr einfach. Sie können eine Variable für gemeinsame Einstellungen festlegen. Zum Beispiel "0" Wenn Sie den Async starten, ändert sich dieser Wert auf "1". So wird Async nie ausgeführt. Wenn Sie den Vorgang beenden, setzen Sie die gemeinsamen Einstellungen wieder auf "0". Wenn der Benutzer das Programm das nächste Mal startet, wird asyncTask ausgeführt und der Wert wird wieder auf "1" zurückgesetzt. Wenn Sie zum Hauptbildschirm zurückkehren, wird asyn nicht ausgeführt. Suchst du danach?

+0

Art von, wie kann ich sicher, wenn meine App beendet? –

+0

Setzen Sie sharedPref auf Ihren gewünschten Wert und führen Sie finish(); 'http: // developer.android.com/Referenz/android/app/Activity.html' – Hexark

+0

OK, es macht endlich Sinn. Ich wusste nicht, dass Sie die android onDestroy() -Methode überschreiben können. Also kann ich in meinem überschriebenen onDestroy das shared pref back auf 0 setzen. Ich denke, es war eine einfache Frage. Aber manchmal braucht man nur jemanden, der dir hilft, herauszufinden, was du vermisst hast. –

2

OK, ich wollte sagen, dass ich nie in der Lage war, die Lösung zu machen, die ich angenommen habe. Es machte Sinn in theroy, aber es würde die finish() Methode jedes Mal aufrufen, wenn ich auf denselben Bildschirm zurückkomme. Daher habe ich jedes Mal nach Aktualisierungen gesucht, wenn ich zum Hauptbildschirm zurückgekehrt bin, was ich vermeiden wollte. Am Ende habe ich nur einen Zeitstempel in Unix-Zeit gespeichert und dann überprüft, ob es 15 Minuten seit der letzten Überprüfung auf ein Update war. Das hat super funktioniert.

+0

sollten Sie nur finish() aufrufen, wenn Sie es auslösen. Wie wenn ein Benutzer auf exit oder etwas drückt. Und nachdem Sie das Update überprüft haben, ist Ihre gemeinsame Voreinstellung auf "aktiviert" gesetzt. Wenn Sie die Schaltfläche auslösen, setzen Sie sie zurück auf "unchecked" und beenden Sie sie. – Hexark

Verwandte Themen