2012-04-08 13 views
4

Auf ICS, bekomme ich einen android.os.NetworkOnMainThreadException Fehler bei der Verwendung von UrlConnection - obwohl ich diese Anfrage in einem Service machen, der auf seinem eigenen Prozess läuft , und wurde asynchron über Messenger aufgerufen.android.os.NetworkOnMainThreadException in einem Dienst in einem separaten Prozess

Ändern der StrictPolicy hatte keine Wirkung, ich bekomme immer noch den Fehler.

Was kann ich tun?

edit: Dieser Dienst läuft in einem separaten Prozess - hat eine andere PID und alles.

Antwort

4

Dienstleistungen noch auf dem Haupt-Thread ausgeführt werden, wie pro der die documentation:

Hinweis, dass die Dienstleistungen, wie auch andere Anwendungsobjekte im Hauptthread von ihrem Hosting-Prozess ausgeführt. Das bedeutet, wenn Ihr Dienst CPU-intensive (z. B. MP3-Wiedergabe) oder blockierende (z. B. Netzwerk-) Vorgänge ausführt, sollte er einen eigenen Thread generieren, der diese Aufgabe übernimmt. Weitere Informationen hierzu finden Sie unter Prozesse und Threads. Die IntentService-Klasse ist als eine Standardimplementierung von Service verfügbar, die über einen eigenen Thread verfügt, in dem sie ihre Arbeit plant.

daher für lange laufende Aufgaben (wie zB eine URLConnection verwenden) sollten Sie entweder so etwas wie ein IntentService verwenden oder ein neues Laichen selbst Gewinde.

+2

Dieser Dienst wird in einem separaten Prozess ausgeführt. – Vadi

+0

Es spielt keine Rolle, ob es in einem separaten Prozess zu Ihren anderen Aktivitäten oder Diensten ausgeführt wird - jeder Code, der direkt im Dienst ausgeführt wird, wird weiterhin im Hauptthread dieses Prozesses ausgeführt. Wenn Sie stattdessen IntentService verwenden, wird automatisch ein neuer Thread für den in onHandleIntent() ausgeführten Code erstellt. – AdamK

+0

Sie sagen also, dass eine Aufgabe, die in einem Timer eines Dienstes ausgeführt wird, der sich in einem vollständig von dem Hauptprozess unterscheidet, auf den Hauptprozess-UI-Thread auswirkt? Ich habe dieses Verhalten nicht bemerkt, meine Benutzeroberfläche friert nicht ein, während das Netzwerk funktioniert ... – Vadi

0

Tun Sie das Netzwerk Zeug in einem Thread dort. Diese Ausnahme wird ausgelöst, um einige Probleme zu vermeiden, z. B. das Einfrieren der Benutzeroberfläche (wegen des Netzwerkjobs, der Zeit benötigt).

Verwandte Themen