La documentation officielle sur Activité répertorie 7 méthodes de cycle de vie.
onPostResume()
n'a pas été cité comme méthode de cycle de vie.
Mais je pense que cette méthode est une méthode importante.
Au cours du cycle de vie, quand une activité est visible de masqué pour montrer son état,
onRestart()
onStart()
onResume()
onPostResume()
ont été invoqués dans l'ordre.
Mon extrait de code:
package ravindra.projects.my_app_1;
import Android.content.Intent;
import Android.content.IntentFilter;
import Android.os.PersistableBundle;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.View;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText txtUserName;
private EditText txtPassword;
Button loginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Ravi","Main OnCreate");
txtUserName=(EditText) findViewById(R.id.username);
txtPassword=(EditText) findViewById(R.id.password);
loginButton = (Button) findViewById(R.id.login);
loginButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d("Ravi", "Login processing initiated");
Intent intent = new Intent(this,LoginActivity.class);
Bundle bundle = new Bundle();
bundle.putString("userName",txtUserName.getText().toString());
bundle.putString("password",txtPassword.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,1);
// IntentFilter
}
public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
Log.d("Ravi back result:", "start");
String result = resIntent.getStringExtra("result");
Log.d("Ravi back result:", result);
TextView txtView = (TextView)findViewById(R.id.txtView);
txtView.setText(result);
}
@Override
protected void onStart() {
super.onStart();
Log.d("Ravi","Main Start");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("Ravi","Main ReStart");
}
@Override
protected void onPause() {
super.onPause();
Log.d("Ravi","Main Pause");
}
@Override
protected void onResume() {
super.onResume();
Log.d("Ravi","Main Resume");
}
@Override
protected void onStop() {
super.onStop();
Log.d("Ravi","Main Stop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("Ravi","Main OnDestroy");
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.d("Ravi","Main PostResume");
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
}
Implémenter onPostResume()
en sautant les méthodes ci-dessous ne sert à rien?
onRestart(), onStart(), onResume()
Quels sont les avantages de l'implémentation de ces trois méthodes si j'implémente onPostResume()
?
onRestart(), onStart(), onResume()
onPostResume:
Appelé lorsque la reprise de l'activité est terminée (après que {@link #onResume} ait été appelé.). Les applications n’implémenteront généralement pas cette méthode; il est destiné aux classes système pour effectuer la configuration finale après application le code de reprise a couru.
Il fera les choses suivantes
Il s’assurera que l’écran est visible pour l’utilisateur et effectuera la configuration finale pour l’activité.
Supprimez toutes les publications en attente de messages avec le code «quoi» qui se trouvent dans. la file d'attente des messages.
Vérifier que tous les fragments sont repris et déplace tous les fragments gérés par FragmentManager du contrôleur dans l'état de reprise.
Exécutez toutes les actions en attente pour les fragments gérés par le FragmentManager du contrôleur.
Si vous vérifiez son étau de cycle de vie cela a fonctionné comme ci-dessous
onResume () - Activité
onResume () - Fragment check third point as explained above
onPostResume () - Activité
onPostResume
est principalement réservé aux actions système qui souhaitent terminer un type de configuration après la reprise des sous-classes.
Les deux choses pour lesquelles il est bon (ce qui peut vous faire croire que c'est important) sont pour faire des actions après que vos fragments imbriqués soient également repris et lorsque les applications sont garanties d'être visibles par l'utilisateur (il peut ne pas être encore visible pendant onResume).
Les noms de méthodes peuvent être un peu déroutants lorsque vous consultez les sources, mais si vous enregistrez le flux, vous verrez ce qui se passe.
J'ajouterai un mot d'avertissement à tous les futurs lecteurs: si vous utilisez onPostResume pour attendre votre fragment, pour appeler une méthode get (par exemple), votre conception est mauvaise et peu fiable. Vous devriez plutôt avoir un motif de rappel de votre fragment et que le fragment "renvoie" les données à l'activité lorsqu'elle est prête.
Après avoir utilisé le journal et les méthodes dominantes du cycle de vie de l'activité, je suis arrivé à la conclusion suivante: Cette méthode peut être très utile si vous souhaitez exécuter une tâche particulière dans l'activité parent après la reprise d'un fragment (après le chargement d'un fragment) ....
J'ai utilisé/essayé les extraits de code suivants pour arriver à cette conclusion:
dans l'activité des parents:
//postResumemethod
@Override
protected void onPostResume() {
super.onPostResume();
Log.v("testPostResume","reached_postResume") ;
}
In called Fragment :
//On ResumeMethod
@Override
public void onResume() {
super.onResume();
Log.v("testStartFragment","reached_Startfragment") ;
}
Ceci est mon journal: V/testStartFragment: reach_Startfragment V/testPostResume: reach_postResume
Nous pouvons voir clairement que le post-CV est appelé après l'exécution de la méthode onResume de Fragment. Donc, après avoir appelé/chargé fragment si vous voulez exécuter n'importe quel code en activité (n'importe quelle tâche à travers l'activité après chargement de fragment)
J'espère que cela clarifie la question