2017-02-04 3 views
0

Diese in meiner Haupttätigkeit ist:Wie AsyncTask zu halten, wenn der Benutzer App schließt

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
    finish(); 
    moveTaskToBack(true); 
    System.exit(0); 
} 

Ich möchte die AsyncTask Put Daten in meinem Server im Hintergrund fortzusetzen, nachdem der Benutzer die App geschlossen wird.

+0

Sie müssen sich mit den Diensten vertraut machen –

+0

Duplizieren - http://StackOverflow.com/Questions/39507506/How-to-execute-background-task-when-android-app-is-closed-set-to-background und http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background –

+0

Machen Sie es sich bequem mit Diensten –

Antwort

2

Ich möchte die AsyncTask fortsetzen, um Daten in meinem Server in den Hintergrund zu setzen, nachdem der Benutzer die App schließt.

Der Zweck AsyncTask ist NICHT Hintergrund Aufgaben auszuführen, die von einer Activity ‚Lebenszyklus über den Rahmen ist. Wenn ein Hintergrund-Thread aus einem Thread-Pool zugewiesen wird, erwartet er, dass er zurückgegeben wird, sobald die Aufgabe beendet ist. dh Sie können keinen AsyncTask verwenden, für den die erforderliche Zeit unbestimmt ist.

Was Sie sind auf der Suche nach ist Services in Android.

Warum sogar AsyncTask verwenden, wenn wir Dienste haben?

Nun, sagen zum Beispiel verlangen, dass Sie ein Bild/Lied von einem Activity auf Klick auf eine Button oder Sie eine Aufgabe ausführen müssen, herunterzuladen, die einige Zeit in seiner Ausführung dauern würde zu beenden. Das Ausführen dieser Aufgaben über den Hauptthread (auch als UI-Thread bezeichnet) ist ein schlechter Ansatz und würde Ihre App träge machen und schließlich zu einem ANR führen. Diese Aufgaben sollen also asynchron von einem separaten Thread verarbeitet werden, um die App Butter flüssig zu halten.

+0

Ich habe noch nie von Dienstleistungen gehört. Ich werde es auf jeden Fall überprüfen. – grant

+0

Das ist der beste Teil ein Teil der Gemeinschaft zu sein. Sie lernen neue Dinge und teilen neue Dinge :) – OBX

+0

Warum sogar AsyncTask verwenden, wenn wir Dienstleistungen haben? – grant

0

Sie haben Dienstleistungen zu überprüfen oder/und IntentServices

1

Dienstleistungen ein Teil einer Lösung, aber beachten Sie, dass ein Dienst im Vordergrund Thread läuft. Sie möchten Ihre AsyncTask über den Dienst ausführen, um sicherzustellen, dass sie weiterhin in einem Hintergrundthread ausgeführt wird.

Persönlich würde ich gegen mit einem Service für die JobScheduler empfehlen oder wenn Sie Geräte unter API 21 unterstützen müssen, Evernote JobManager (das auch ein bisschen einfacher zu bedienen ist). Diese helfen Ihnen, Ihre Hintergrundoperationen zu geeigneten Zeiten zu planen, um den Akkuverbrauch zu minimieren oder wenn das Gerät im Leerlauf ist. Es ist wichtig, ein guter Bürger zu sein, wenn Sie die Ressource des Geräts verwenden.

+0

Funktioniert 'System.exit (0);' einen Dienst? – grant

+0

@grant System.exit (0) stoppt den Dienst. Es stürzt im Wesentlichen den App-Prozess ab. Der Dienst wird jedoch möglicherweise abhängig vom Typ des von Ihnen erstellten Diensts neu gestartet. Wenn der Dienst ein so genannter Sticky-Dienst ist (https://developer.android.com/reference/android/app/Service.html#START_STICKY), startet das Betriebssystem den Dienst neu, wodurch der Prozess natürlich neu gestartet wird. – dhaag23

Verwandte Themen