Est-ce une bonne pratique de recharger une Activity
dans Android ?
Quelle serait la meilleure façon de le faire? this.finish
et ensuite this.startActivity
avec l'activité Intent
?
Vous pouvez simplement utiliser
finish();
startActivity(getIntent());
pour rafraîchir une Activity
à partir de lui-même.
C'est ce que je fais pour recharger l'activité après le changement de retour d'un changement de préférence.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Cela provoque essentiellement l'activité de se redessiner.
Mise à jour: Une meilleure méthode consiste à appeler la méthode recreate()
. Cela entraînera la recréation de l'activité.
pour ceux qui ne veulent pas voir que clignote après recréer () méthode, utilisez simplement
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Je devais mettre à jour rapidement une liste de messages dans l'une de mes applications. Je venais donc d'actualiser mon activité principale d'interface utilisateur avant de fermer la boîte de dialogue dans laquelle j'étais auparavant. Je suis sûr qu'il existe de meilleures façons de le faire.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android comprend un système de gestion des processus qui gère la création et la destruction d'activités, ce qui annule en grande partie tout avantage que vous verriez du redémarrage manuel d'une activité. Vous pouvez voir plus d'informations à ce sujet sur Principes de base de l'application
La bonne pratique consiste toutefois à veiller à ce que vos méthodes onPause et onStop libèrent toutes les ressources inutiles et utilisez onLowMemory pour réduire au minimum les besoins de votre activité.
J'ai déjà vu des réponses sur le rechargement de l'activité à l'aide de l'intention. Ceux-ci fonctionneront, mais vous pouvez également faire la même chose en utilisant la méthode recreate () indiquée dans la classe d'activité elle-même.
Au lieu d'écrire ceci
// Actualiser l'activité principale à la fermeture de la boîte de dialogue
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Ceci peut être fait en écrivant ceci seulement
recreate();
Commencez avec l'intention de votre même activity
et fermez la activity
.
Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
j'ai le même problème
import Android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
ce code fonctionne pour moi . Api Android 17
dans certains cas, c'est la meilleure pratique dans d'autres, ce n'est pas une bonne idée de le faire, elle dépend du contexte.
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
la chose est que chaque fois que vous terminez () de activityIWishToRun vous revenez à votre activité vivante
Dans une activité, vous pouvez appeler recreate()
pour "recréer" l'activité (API 11+)
Après avoir expérimenté cela pendant un moment, je n'ai trouvé aucune conséquence inattendue du redémarrage d'une activité. De plus, je pense que cela ressemble beaucoup à ce que fait Android par défaut lorsque l'orientation change. Je ne vois donc aucune raison de ne pas le faire dans des circonstances similaires.
Je ne pense pas que ce soit une bonne idée ... il serait préférable de mettre en œuvre une méthode plus propre. Par exemple, si votre activité contient un formulaire, la méthode de nettoyage pourrait simplement effacer chaque widget du formulaire et supprimer toutes les données temporaires. Je suppose que c'est ce que vous voulez: restaurer l'activité à son état initial.
simplement utiliser
this.recreate();
cela déclenchera la méthode onCreate dans l'activité
J'avais une autre approche comme celle-ci: régler la launchMode
de mon activité sur singleTop
et sans appeler finish()
, juste startActivity(getIntent())
ferait l'affaire. Il suffit de se préoccuper des nouvelles données à la fois dans onCreate()
et onNewIntent
. Avec Sush, l’application peut clignoter comme l’a dit AMAN SINGH. Mais l'approche de AMAN SINGH créera toujours une nouvelle activité qui, d'une certaine manière, est inutile, même s'il corrigeait le problème du "clignotement", je pense.
Trop tard pour cette question, mais si quelqu'un cherche une solution, la voici.
Recharger toute votre activité peut être une lourde tâche
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
et appelez "onResume ()" chaque fois que nécessaire.