Welche Vor-/Nachteile bestehen bei der Platzierung eines langen Netzwerkzugriffscodes in einem Thread in einer Aktivität oder einem Thread in einem Service? Wie würde es die Anwendung beeinflussen? Ich schreibe einen Streaming-Audio-Player und von dem, was ich bisher gelesen habe, den Code in einen Dienst zu stecken wird immer noch die Anwendung blockieren, so dass ein neuer Thread benötigt wird, weiß jemand, ob es sinnvoller ist, dieses Stück Code zu setzen in einem Dienst.Anwendungs-Threads vs. Service-Threads
Antwort
Ja, ein blockierender Vorgang in einem Dienst blockiert die Anwendung weiterhin. Trotz der ersten Aufrufe dienen Dienste nicht dazu, Aufgaben im Hintergrund auszuführen. Sie dienen zum Ausführen von Aufgaben mit einem Lebenszyklus, der unabhängig vom Aktivitätslebenszyklus ist (IE, sie können nach dem Schließen der Aktivität fortgesetzt werden).
Ein Dienst, der beim Starten und Beenden einer Aktivität beginnt, wenn die Aktivität endet, ist nutzlos.
In Ihrem Fall, in dem Sie Audio streamen, möchten Sie möglicherweise Audio streamen, auch nachdem der Benutzer die Aktivität beendet hat. In diesem Fall sollten Sie einen Dienst verwenden, aber Sie benötigen weiterhin einen Thread (oder eine AsyncTask)) zum Blockieren von Aufgaben.
Aus meiner Erfahrung (1+ Jahre Entwicklung von Android) gibt es keinen Unterschied zwischen dem Ausführen eines neuen Threads in einem Dienst oder in einer Aktivität. Versuchen Sie nicht, einen Verweis auf die Aktivität im neuen Thread beizubehalten - verwenden Sie den Anwendungskontext.
Auch der Lebenszyklus des Dienstes konnte nicht helfen, da einige Methoden nicht aufgerufen werden garantiert :(
Der einzige Unterschied sein kann, dass der Dienst ohne Zerstörung die App komplett zerstört werden kann - so potenziell die neuen Themen zu zerstören Warum möglicherweise, weil auf der praktischen Seite, dies nicht geschieht die App IMMER getötet wird, ohne vorher den Dienst zu töten, was bedeutet:.?. der lokale Service-Mechanismus ist nutzlos !! !
Remote-Service ist eine andere Diskussion - ich bezog mich nur auf "wo soll ich einen neuen Thread ausführen?".
Viel Glück !!!
Können Sie eine Situation angeben, in der Sie einen neuen Thread in einem Dienst ausführen müssen, anstatt nur einen neuen Thread in einer Aktivität auszuführen, um dieselbe Aufgabe auszuführen? – committedandroider
@committedandroider Sagen wir, Sie haben eine Browser App und der Benutzer wählt eine Datei von 1 GB herunterzuladen. Der Nutzer wird Ihre Browser-App nicht geöffnet lassen und warten, bis die Datei heruntergeladen ist. Er startet einfach den Download und beendet die App.Wenn in diesem Fall der Thread, der von Activity erzeugt wurde, nicht mehr läuft, müssen Sie einen Thread aus dem Service spawnen. – CopsOnRoad
@Jack ja, das macht Sinn. Das war vor langer Zeit lol – committedandroider
- 1. Wie können die Markierungs- und Sweep-Phasen von .NET GC gleichzeitig mit Anwendungsthreads ausgeführt werden?
- 2. Klasse vs Paket vs Modul vs Komponente vs Container vs Service vs Plattform in Java Welt
- 3. Opa vs Dart vs Haxe vs Coffee
- 4. Akkumulieren vs falten vs reduzieren vs komprimieren
- 5. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 6. ACE vs Boost vs Poco vs wxWidgets
- 7. Inline vs __inline vs __inline__ vs __forceinline?
- 8. Metaphon vs Levenshtein vs Soundex vs Hamming
- 9. Standort vs GeoPoint vs 1E6 vs Aufladen
- 10. VS 2013 MSTest vs nUnit vs xUnit
- 11. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 12. SpiderMonkey vs JavaScriptCore vs?
- 13. & vs * und | vs +
- 14. Bundler vs RVM vs Gems vs RubyGems vs Gemsets vs System Ruby
- 15. Mathematica: Unevaluated vs Aufschieben vs Halten vs Holdform vs HoldAllComplete vs etc etc
- 16. ScheduledExecutorService vs Timer vs Handler
- 17. HttpRequest vs HttpRequestMessage vs HttpRequestBase
- 18. pycuda vs theano vs pylearn2
- 19. Entfernungsabtastung vs Einzelscan vs Überspringungssuche
- 20. Htmlentities vs addslashes vs mysqli_real_escape_string
- 21. Xamarin vs Mono vs Monodevelop
- 22. Ansichtsfenster vs Fenster Vs Dokument
- 23. Redis vs Memcahced vs Hazelcast
- 24. java.lang.Void vs void vs Null
- 25. import vs __import __() vs importlib.import_module()?
- 26. QueryPerformanceCounter() vs QueryInterruptTime() vs KeQueryInterruptTime()
- 27. apc_define_constants vs hidef vs definieren
- 28. Zeiger vs auto_ptr vs shared_ptr
- 29. ASSERT vs. ATLASSERT vs. assert
- 30. Int vs NSNumber vs NSInteger
Danke, das habe ich mir gedacht. Zu einem verwandten Thema, zumindest im Emulator, nachdem ich den Streaming Player gestartet habe, würde es auch nach dem Drücken der Zurück-Taste weiterspielen. Ich ging davon aus, dass es aufhören würde, wenn die Aktivität nicht mehr im Vordergrund stand ... ist es wegen des neuen Threads oder wird es trotzdem spielen, bis Android die Anwendung beendet. – zerayaqob
Ja, der Thread wird weiterlaufen, bis Android ihn tötet. Wenn Sie möchten, dass es aufhört, implementieren Sie eine Art "aktives" Flag und setzen Sie es in Ihrer onDestroy() -Methode auf false. – synic
Beachten Sie auch, dass Threads in einer 'Activity' zerstört werden, wenn sich die Konfiguration (read: orientation) ändert! Dies gilt nicht für Threads in 'Service's. – MrSnowflake