Ich beginne mit Google C2DM. Ein Teil dieses Prozesses beinhaltet das Empfangen einer Broadcast Intent, wenn die Registrierung stattgefunden hat. In Google's official C2DM documentation zeigt das Beispiel-Code den folgenden Kommentar in der BrodcastReceiver der OnReceive() -Methode:Was ist der richtige Weg, um die Netzwerkkommunikation basierend auf dem Empfang einer Broadcast Intent zu initiieren?
// Send the registration ID to the 3rd party site that is sending the messages.
// This should be done in a separate thread.
jedoch alles, was ich gelesen habe, einschließlich the documentation for BroadcastReceiver, lässt vermuten, dass von OnReceive einen Thread starten() wird mit ziemlicher Sicherheit zu Problemen führen , denn sobald onReceive() zurückgegeben wurde, wird der Prozess wahrscheinlich bald beendet.
Es ist möglich, dass jemand nur einen Fehler gemacht hat, und dass ich den Kommentar über die Verwendung eines separaten Threads einfach ignorieren sollte, aber ich vermute, es gibt einen Grund, warum sie es gesagt haben, auch wenn es irreführend ist.
Gibt es einen Grund, warum man das Netzwerk nicht aus demselben Thread wie onReceive() verwenden kann oder soll, bevor man zurückkehrt? Wenn dies problematisch ist, was ist der richtige Weg, um mit einer allgemein üblichen Situation umzugehen, auch außerhalb von C2DM? Starten eines Dienstes?
'AsyncTask' ist hier nicht geeignet. Grundsätzlich ist jede asynchrone Operation für 'onReceive()' ungeeignet. Weitere Informationen finden Sie in der 'onReceive()' Dokumentation. Am besten starten Sie einen 'Service', der die Netzwerkkommunikation initiiert. – curioustechizen
Oh ja, daran hatte ich schon gedacht, aber ich war aufgeregt, als wir herausfanden, dass wir auf dem UI-Thread waren und vergaß es. Vielen Dank. –