Est-ce une bonne pratique de recharger un Activity
dans Android ?
Quelle serait la meilleure façon de procéder? this.finish
puis this.startActivity
avec l'activité Intent
?
Est-ce une bonne pratique de recharger un Activity
dans Android ?
Quelle serait la meilleure façon de procéder? this.finish
puis this.startActivity
avec l'activité Intent
?
Réponses:
Vous pouvez simplement utiliser
finish();
startActivity(getIntent());
pour rafraîchir un Activity
de l'intérieur de lui-même.
pour ceux qui ne veulent pas voir ce clignotement après la méthode recreate () , utilisez simplement
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
C'est ce que je fais pour recharger l'activité après avoir changé en revenant 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 façon de procéder consiste à appeler la recreate()
méthode. Cela entraînera la recréation de l'activité.
J'ai vu les réponses précédentes qui ont été données pour recharger l'activité en utilisant Intent. Ceux-ci fonctionneront mais vous pouvez également faire de même en utilisant la méthode recreate () donnée dans la classe Activity 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();
Cela peut être fait en écrivant ceci uniquement
recreate();
recreate()
était la solution pour moi - "redémarrer" l'activité ne fonctionnait pas pour moi, car j'ai commencé l'activité en utilisant "StartActivityForResult" et cela a cassé le comportement.
utilisez simplement
this.recreate();
cela déclenchera la méthode onCreate dans l'activité
J'avais besoin de mettre à jour une liste de messages dans l'une de mes applications à la hâte, alors j'ai juste effectué un rafraîchissement de mon activité d'interface principale avant de fermer la boîte de dialogue dans laquelle j'étais. Je suis sûr qu'il existe de meilleures façons d'y parvenir également.
// 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 à redémarrer manuellement une activité. Vous pouvez voir plus d'informations à ce sujet dans Application Fundamentals
Cependant, la bonne pratique consiste à s'assurer que vos méthodes onPause et onStop libèrent toutes les ressources que vous n'avez pas besoin de conserver et d'utiliser onLowMemory pour réduire vos besoins d'activités au minimum absolu.
dans certains cas, c'est la meilleure pratique dans d'autres, ce n'est pas une bonne idée que cela dépend du contexte si vous choisissez de le faire en utilisant ce qui suit est le meilleur moyen de passer d'une activité à ses fils:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
la chose est chaque fois que vous avez terminé () de activityIWishToRun vous retournez à votre activité vivante
Recharger toute votre activité peut être une tâche difficile. Mettez simplement la partie du code qui doit être actualisée dans ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
Et appelez " onResume () " chaque fois que nécessaire.
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 peut 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.
Après avoir expérimenté cela pendant un certain temps, je n'ai trouvé aucune conséquence inattendue du redémarrage d'une activité. En outre, je pense que cela est très similaire à ce que fait Android par défaut lorsque l'orientation change, donc je ne vois pas de raison de ne pas le faire dans des circonstances similaires.
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. Android api 17
Dans une activité, vous pouvez appeler recreate()
pour "recréer" l'activité (API 11+)
J'avais une autre approche comme: régler launchMode
mon activité sur singleTop
et sans appeler finish()
, startActivity(getIntent())
fera juste le travail. Il suffit de se soucier des nouvelles données à la fois dans onCreate()
et onNewIntent
. À la manière de Sush, l'application peut clignoter comme l'a dit AMAN SINGH. Mais l'approche d'AMA SINGH créera toujours une nouvelle activité qui est en quelque sorte inutile, même s'il a résolu le problème du «clignotement», je pense.
Trop tard pour cette question, mais si quelqu'un cherche une solution, la voici.
Après la connexion, j'ai eu le même problème, j'ai donc utilisé
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
je l'ai utilisé et cela fonctionne bien sans
finish()
startActivity(getIntent());
pour moi ça marche ça ne crée pas une autre intention et sur la même intention les nouvelles données chargées.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);