2010-12-03 16 views
3

Alle paar Male öffne ich den Emulator, es scheint, im Offline-Modus zu sein, mit dem "X" oben auf dem Bildschirm anstelle des 3g-Symbols und keine offensichtliche Netzwerkverbindung.Android Emulator startet gelegentlich das Netzwerk nicht

Der einzige offensichtliche Unterschied in den Protokollen die ich gefunden habe ist:

Network works: 
12-03 11:24:48.732 D/qemud ( 37): client_fd_receive: attempting registration for service 'gsm' 
12-03 11:24:48.732 D/qemud ( 37): client_fd_receive: -> received channel id 2 
12-03 11:24:48.742 D/qemud ( 37): client_registration: registration succeeded for client 2 

Network fails: 
12-03 03:02:11.688 D/qemud ( 37): client_fd_receive: attempting registration for service 'gsm' 
12-03 03:02:11.688 D/qemud ( 37): client_fd_receive: -> received channel id 2 

Hat jemand eine Idee haben, warum die Registrierung von einem Lauf zum anderen nicht gelingen würde?

+0

Siehe ähnliche Frage hier: noch keine Antworten auf das Problem, aber um Reposting als ein asnwer zu speichern Ich werde es als Kommentar hinterlassen: [Android Emulator manchmal nicht mit dem Internet verbinden] (http://stackoverflow.com/questions/4336297/android-emulator-someone-does-nicht-connect-to-the-internet/4336694 # 4336694) – Scoobler

+0

Beobachtet das gleiche Verhalten in der Vergangenheit. Ein Vorschlag: Wenn Sie VD starten, geben Sie ihm Zeit, also starten Sie keine Anwendung, bis Android alle Systemdienste geladen hat. Da ich dieser einfachen Regel folge, passiert es mir nicht oft. – Zelimir

Antwort

1

Da dies für CI ist, wurde eine temporäre Problemumgehung benötigt. Unser Build führt zuerst einen Gating-Test durch, um zu überprüfen, ob das Netzwerk ohne Probleme funktioniert. Jedes Mal, wenn unsere Tests beginnen, wird der Emulator erstellt und auf Netzwerkkonnektivität getestet. Nur wenn das Netzwerk aktiv ist, werden die Tests ausgeführt, andernfalls wird die Neuterminierung für einige Minuten später (mit einer neuen Emulatorinstanz) neu geplant. Dies verhindert zwar nicht das Problem, verhindert jedoch, dass unser kontinuierliches Integrationssystem falsche Fehler erzeugt.

So wie ich für die Prüfung mich, ob das Netzwerk bis ist mit einem kleinen groovy Skript, das als separatem Auftrag ausgeführt:

String status= 
    ['sh', '-c', 'adb shell dumpstate | grep -m1 \"Mobile data state: \"'].execute().text.trim(); 

if (status=="Mobile data state: CONNECTED") { 
    System.exit(0); 
} else { 
    System.exit(1); 
} 

Während potentiell eine Verschwendung von Ressourcen, es schlägt die Alternative der intermittierenden Ausfall E-Mails.