Frage

Ich habe eine rudimentäre Datenprotokollierungs-App erstellt, die die Benutzereingabewerte in eine dynamische und oft große Anzahl von EditText-Ansichten umwandeln soll.Sobald der Benutzer alle Daten eingegeben hat, kann eine Taste gedrückt werden, die ein Bild von der Dateneingabe aufnimmt (bitte beachten Sie, dass die Eingabe als Bild gespeichert wird, dafür gibt es bestimmte Gründe) und das Bild speichert Speicher.

Problem: Es funktioniert sehr gut, bis auf ein bestimmtes Problem.Gelegentlich, wenn der Benutzer das Telefon in den Leerlauf versetzt (was häufig vorkommt, bevor die Eingabe tatsächlich gespeichert wird), werden alle Eingaben in den EditText Ansichten gelöscht (was mich zu einer sehr wütenden / traurigen Person macht).Außerdem ist es nur aufgetreten, wenn ich vor Ort bin und die Protokolldateien in Eclipse nicht anzeigen kann, um herauszufinden, welche Methoden möglicherweise anders als normal aufgerufen werden.

Frage:Warum bleiben die Werte in meinen Edittexten die meiste Zeit bestehen, wenn das Telefon in den Leerlauf geht und wieder aus dem Leerlauf geht, aber sie werden bei scheinbar zufälligen (und oft unbequemen) Gelegenheiten gelöscht?

Ich habe das Gefühl, dass dies dadurch verursacht wird, dass onStop () bei bestimmten Gelegenheiten anstelle von onPause () (oder vielleicht umgekehrt) aufgerufen wird, aber mein Wissen über diese Methoden ist noch nicht ganz auf dem neuesten Stand.Mir ist auch bewusst, dass dieses Problem über eine SharedPreferences-Datei (oder eine solche Idee) gelöst werden könnte, aber ich würde gerne wissen, was passiert, um mehr als alles andere zu verstehen.

Hinweise:

-Ich bin mir nicht sicher, ob einer dieser Codes für die Frage sinnvoll relevant sein könnte, aber ich werde einen Ausschnitt meiner onCreate () -Methode einfügen, wenn es hilft.Lass es mich wissen, wenn ich noch etwas hinzufügen soll:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_param);

    Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent

-Ich habe keine der Lebenszyklusmethoden außer Kraft gesetzt (z.onStop(), onResume() usw.) außer für onCreate().Keine der anderen Methoden in meiner Tätigkeit sollte etwas mit dem Problem zu tun haben / soweit ich das beurteilen kann

War es hilfreich?

Lösung

Ich glaube, dass das Problem darin besteht, dass zu Zeiten, in denen Ihre App "inaktiv" ist (dh.in den Hintergrund gehen, Bildschirm ausschalten), dass Android es automatisch bereinigt und alle Daten zerstört, einschließlich der in Ihrem EditTexts.

Wenn eine Aktivität angehalten oder gestoppt wird, kann das System die Aktivität aus dem Speicher löschen, indem es sie entweder auffordert, sie zu beenden, oder einfach ihren Prozess beendet.Wenn es dem Benutzer erneut angezeigt wird, muss es vollständig neu gestartet und in seinen vorherigen Zustand zurückversetzt werden.

http://developer.android.com/reference/android/app/Activity.html

Um dieses Problem zu beheben, können Sie das überschreiben onSavedInstanceState() methode zum Speichern Ihrer EditText werte und dann onCreate() zieht diese Werte zurück, wenn Sie zur Aktivität zurückkehren.Sie benötigen dann eine Überprüfung, um zu sehen, ob Sie Ihre neu auffüllen müssen EditTexts aus diesen Werten oder wenn sie null wären.Mehr dazu hier.

Andere Tipps

Dies geschieht wahrscheinlich, weil das Ondestroy- oder OnPause-Verfahren in der Leerlaufzeit aufgerufen wird.Der Ondestroy würde in Hülle aufgerufen. Der Speicher ist die Verwendung der App ist hoch.Die einzige Lösung meiner Meinung nach ist es, Daten in einem lokalen DB zu speichern, da er eingegeben wird, und sie füllen sie onresume auf.

Um Ihr Problem in der OnPause () -Methode Ihrer Tätigkeit zu lösen () Legen Sie die Werte wieder auf den Edittsxt.

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top