Thread oder Dienste

7

Ich bin verwirrt zwischen Thread und Service auf Android. Wenn ich eine Datei vom Server herunterladen muss. Es können mehrere Dateien gleichzeitig sein. Was soll ich in dieser Situation, Thread oder Services wählen?

    
Thanh Le 19.08.2010, 10:14
quelle

5 Antworten

13

Wenn Sie in einem Service etwas tun, wird es nicht im Hintergrund ausgeführt. Sie müssen auch einen Thread in Ihrem Dienst erstellen, um auf den Abschluss des Downloads zu warten.

Wenn Sie einen Thread verwenden, der für eine Aktivität lokal ist, haben Sie Probleme beim Verlassen der Aktivität, beim Senden in den Hintergrund oder bei einer Unterbrechung wegen eines eingehenden Anrufs usw. Dies kann dazu führen, dass Ihre App vom Betriebssystem gelöscht wird um Speicher freizugeben. In diesem Fall ist Ihr Thread verloren und wird möglicherweise nicht neu gestartet und führt zum Absturz Ihrer App.

Wenn Sie einen Dienst erstellen, der nicht so wahrscheinlich beendet wird, dann nur ein Thread, und Sie können das Betriebssystem angeben, um den Dienst neu zu starten, nachdem es vom Betriebssystem beendet wurde. Dies macht den Service zu einer sichereren Wahl für sehr lange Downloads. Ich verwende einen Dienst in einer meiner Apps, um eine 20 MB-Datei herunterzuladen und in diesem Dienst einen Thread zu erstellen, der den Download durchführt.

Ein Service hilft Ihnen nur, den Download zu kapseln und entkoppelt ihn von der Aktivität und gibt Ihnen einen anderen Zustand im Betriebssystem, der verhindert, dass der Thread einfach wegen zu wenig Arbeitsspeichers verschwindet.

    
Janusz 19.08.2010, 10:31
quelle
18
  

Was sollte ich in dieser Situation Thread oder Dienste wählen?

Es ist kein "oder". Es ist ein "und". Sie verwenden einen Hintergrundthread und einen Service.

Ein Service ist aus Sicht der Benutzeroberfläche "im Hintergrund", da er keine Benutzeroberfläche hat. Ein Service ist nicht automatisch "im Hintergrund" von einem Threading-Standpunkt, in dem onCreate() , onDestroy() , onStart() und onBind() alle im Hauptanwendungs-Thread aufgerufen werden, derselbe Thread, der von allen Aktivitäten geteilt wird dieser Anwendung. Alles, was lange läuft, wie ein Download, muss außerhalb des Hauptanwendungs-Threads erfolgen, z. B. mit AsyncTask .

Wenn Ihre Downloads fortgesetzt werden müssen, selbst wenn die Aktivität, die sie ausgelöst hat, zerstört wird, müssen Sie einen Dienst verwenden, wobei der Dienst einen AsyncTask - oder Hintergrundthread verwendet, um den Download abzuschließen. Noch besser ist es, ein IntentService zu verwenden, das einen regulären Dienst mit einem Hintergrundthread kombiniert.

    
CommonsWare 19.08.2010 10:31
quelle
0

Der Thread eignet sich für eine Aufgabe im Hintergrund für eine Anwendung. Sie möchten einen Dienst verwenden, wenn Sie diesen für mehrere Anwendungen benötigen.

    
jacknad 19.08.2010 10:21
quelle
0

Wenn Sie eine Schnittstelle für andere Apps bereitstellen möchten, um mit Ihrem herunterladenden Activity: Dienst zu kommunizieren. Wenn der Download nur im Hintergrund ausgeführt werden soll, damit der Benutzer mit der Benutzeroberfläche interagieren kann.

    
alopix 19.08.2010 10:22
quelle
0

Ihre Frage befindet sich bereits in der Dokumentation . Überprüfen Sie die rechte Spalte.

    
dev mz 15.07.2011 17:17
quelle

Tags und Links