web-dev-qa-db-fra.com

Méthodes du cycle de vie de l'activité: signification de onPostResume

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()
14
Ravindra babu

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 

  1. Il s’assurera que l’écran est visible pour l’utilisateur et effectuera la configuration finale pour l’activité.

  2. Supprimez toutes les publications en attente de messages avec le code «quoi» qui se trouvent dans. la file d'attente des messages.

  3. 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.

  4. 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

  1. onResume () - Activité

  2. onResume () - Fragment check third point as explained above

  3. onPostResume () - Activité

19
jitesh mohite

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.

  1. Activité reprend
  2. Fragment Reprend
  3. onPostResume est appelé dans Activity

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.

5
Nick Cardoso

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

0
Naman