Ist es eine gute Praxis, ein Activity
in Android neu zu laden ?
Was wäre der beste Weg, dies zu tun? this.finish
und dann this.startActivity
mit der Aktivität Intent
?
Ist es eine gute Praxis, ein Activity
in Android neu zu laden ?
Was wäre der beste Weg, dies zu tun? this.finish
und dann this.startActivity
mit der Aktivität Intent
?
Antworten:
Sie können einfach verwenden
finish();
startActivity(getIntent());
ein Activity
aus sich heraus erfrischen .
Für diejenigen, die dieses Blinken nach der Methode recreate () nicht sehen möchten, verwenden Sie einfach
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Dies ist, was ich tue, um die Aktivität nach dem Ändern nach einer Änderung der Einstellungen neu zu laden.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Dies bewirkt im Wesentlichen, dass sich die Aktivität selbst neu zeichnet.
Aktualisiert: Ein besserer Weg, dies zu tun, ist das Aufrufen der recreate()
Methode. Dadurch wird die Aktivität neu erstellt.
Ich habe frühere Antworten gesehen, die zum erneuten Laden der Aktivität mit Intent gegeben wurden. Diese funktionieren, aber Sie können dasselbe auch mit der Methode recreate () tun, die in der Aktivitätsklasse selbst angegeben ist.
Anstatt dies zu schreiben
// Hauptaktivität beim Schließen des Dialogfelds aktualisieren
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Dies kann nur durch Schreiben erfolgen
recreate();
recreate()
war die Lösung für mich - "Neustart" der Aktivität funktionierte nicht für mich, da ich die Aktivität mit "StartActivityForResult" gestartet habe und das Verhalten dadurch unterbrochen wurde.
einfach benutzen
this.recreate();
Dadurch wird die onCreate-Methode in der Aktivität ausgelöst
Ich musste schnell eine Nachrichtenliste in einer meiner Anwendungen aktualisieren, daher habe ich nur eine Aktualisierung meiner Hauptbenutzeroberflächenaktivität durchgeführt, bevor ich den Dialog geschlossen habe, in dem ich mich befand. Ich bin sicher, dass es auch bessere Möglichkeiten gibt, dies zu erreichen.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android enthält ein Prozessmanagementsystem, das die Erstellung und Zerstörung von Aktivitäten übernimmt und den Nutzen eines manuellen Neustarts einer Aktivität weitgehend zunichte macht. Weitere Informationen dazu finden Sie unter Anwendungsgrundlagen
Es empfiehlt sich jedoch sicherzustellen, dass Ihre Methoden onPause und onStop alle Ressourcen freigeben, an denen Sie nicht festhalten müssen, und onLowMemory verwenden , um die Anforderungen Ihrer Aktivitäten auf ein absolutes Minimum zu reduzieren.
In einigen Fällen ist es die beste Vorgehensweise, in anderen Fällen ist es keine gute Idee, dass es kontextabhängig ist, wenn Sie sich dafür entscheiden. Der folgende Weg ist der beste Weg, um von einer Aktivität zu ihren Söhnen überzugehen:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
Die Sache ist, wann immer Sie () von activityIWishToRun beenden, kehren Sie zu Ihrer lebenden Aktivität zurück
Das Nachladen Ihrer gesamten Aktivität kann eine schwere Aufgabe sein. Fügen Sie einfach den Teil des Codes ein, der aktualisiert werden muss ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
Und rufen Sie bei Bedarf " onResume () " auf.
Ich denke nicht, dass das eine gute Idee ist ... es wäre besser, eine sauberere Methode zu implementieren. Wenn Ihre Aktivität beispielsweise ein Formular enthält, kann die Cleaner-Methode einfach jedes Widget im Formular löschen und alle temporären Daten löschen. Ich denke, das ist es, was Sie wollen: Stellen Sie die Aktivität in ihren ursprünglichen Zustand zurück.
Nachdem ich eine Weile damit experimentiert habe, habe ich keine unerwarteten Konsequenzen beim Neustart einer Aktivität festgestellt. Ich glaube auch, dass dies sehr ähnlich zu dem ist, was Android standardmäßig tut, wenn sich die Ausrichtung ändert, daher sehe ich keinen Grund, dies unter ähnlichen Umständen nicht zu tun.
Ich habe das gleiche Problem
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
Dieser Code funktioniert für mich. Android API 17
In einer Aktivität können Sie aufrufen recreate()
, um die Aktivität "neu zu erstellen" (API 11+).
Ich hatte einen anderen Ansatz wie: Die Einstellung launchMode
meiner Aktivität auf singleTop
und ohne Anruf finish()
, startActivity(getIntent())
wird einfach den Job machen. Sie müssen sich nur um die neuen Daten in onCreate()
und kümmern onNewIntent
. Auf Sushs Art kann die Anwendung blinken, wie AMAN SINGH sagte. Aber AMAN SINGHs Ansatz wird immer noch eine neue Aktivität schaffen, die irgendwie unnötig ist, selbst wenn er das "Blink" -Problem behoben hat, denke ich.
Für diese Frage zu spät, aber wenn jemand nach einer Lösung sucht, ist sie hier.
Nach dem Login hatte ich das gleiche Problem, also habe ich verwendet
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
Ich habe dies verwendet und es funktioniert gut ohne
finish()
startActivity(getIntent());
Für mich funktioniert es, es werden keine weiteren Absichten erstellt und auf diese Weise werden die neuen Daten der Absichten geladen.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);