2016-04-16 7 views
0

verbindet Ich entwickle eine App, die ein OTG-USB-Gerät verwendet.Aktivität onCreate() aufgerufen, wenn OTG-Gerät

Das Gerät, das ich verwende, ist ein USB-Barcodescanner, der von Android als Tastatur erkannt wird.

Aber ich entdeckte, dass jedes Mal, wenn ich das OTG-Gerät einstecke oder abziehe, die App durch Aufrufen der Activity onCreate() -Methode neu gestartet wird.

Das verursacht mir eine Menge Probleme, weil ich nicht erkennen kann, warum die onCreate() -Methode aufgerufen wird.

Gibt es irgendeine Absicht oder irgendetwas, das gefeuert werden könnte und eingefangen werden könnte, wenn das Otg-Gerät eingesteckt/ausgesteckt ist?

Vielen Dank im Voraus.

Antwort

2

android startet Ihre Aktivität wegen der Konfigurationsänderung neu, siehe Dokumentation here.

um sicherzustellen, dass dies der Fall ist, versuchen Sie, android:configChanges="keyboard" zu Ihrem Eintrag in der Manifest-Datei hinzuzufügen. Dies sagt android an, die Aktivität nicht neu zu starten, wenn eine Tastatur angeschlossen wird. Danach sollte onCreate() nicht mehr beim Einstecken des Geräts aufgerufen werden.

Beachten Sie, dass Sie dies nicht als Fix verwenden sollten, es ist nur ein Weg, um sicherzustellen, dass dies der Fall für Sie ist (und es ist keine spezielle Sache in Ihrem Code). Sie müssen mit dem Neustart der Aktivität fertig werden, da dies normales Verhalten in Android ist und keine Probleme mit Ihrer Anwendung verursachen sollte. Eine häufige Ursache für den Neustart der Aktivität sind Orientierungsänderungen, und es wird sehr davon abgeraten, den obigen Ansatz zu verwenden, um Ihre Aufgabe zu lösen. Ihre Aktivität sollte keine Probleme haben, wenn Android sie neu starten möchte. Weitere Informationen finden Sie unter this.

+0

Vielen Dank Mike, ich habe die Links überprüft, die Sie mir vorgeschlagen haben. Ich werde versuchen, die Zustände wiederherzustellen, wenn die configChanges auftreten. Aber ich habe eine dumme Frage. Also konnte ich alle meine Variablen auf ein Headless-Fragment mit setRetainInstance (true) setzen und natürlich konnte ich es wiederherstellen, wenn ongfigChange auftritt. Aber bevor Fragmente existierten, wie zur Hölle konnten Sie Variablen wiederherstellen. – Herman

+0

Sie müssen keine Fragmente verwenden, wenn Ihre Variablen Parcelable sind. Wenn dies der Fall ist, können Sie 'onSaveInstanceState' überschreiben, speichern Sie Ihre Variablen dort im Bundle und stellen Sie sie später mit dem Bundle wieder her, das an Ihren' onCreate' übergeben wurde (siehe [this] (http://developer.android.com/training/basics/activity) -lifecycle/recating.html). – Mike

+0

@Herman, Wenn Ihre Variablen nicht durch das Bundle gespeichert werden können (zB 'Socket', 'Thread' oder' AsyncTask's), dann sind Fragmente der richtige Weg. Vor Fragmenten könnten Leute das veraltete 'onRetainNonConfigurationInstance()' verwenden. siehe [dies] (http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html). – Mike