103 votes

OnCreate non appelé

J'ai 2 activités : Dans la première activité, l'utilisateur clique sur un bouton qui lance la 2ème activité. La 2ème activité fait tout le travail.

Je lance la 2ème activité comme suit qui se trouve à l'intérieur d'une classe interne onClickListener et j'ai essayé de l'appeler explicitement avec (FirstActivity.this, Simple.Class) mais la même chose se produit.

    Intent test = new Intent(arg0.getContext(), Simple.class);
    startActivity(test);

Sur l'émulateur, je vois l'écran se déplacer comme s'il appelait la 2ème activité mais tout ce que j'obtiens est un écran noir mais rien n'est chargé depuis mon layout. J'ai regardé dans logcat et je vois quelques messages d'échec du thread binder. Voici la fonction onCreate de ma 2ème activité mais je n'obtiens aucun résultat montrant que les fonctions Log ont été appelées, ni à l'écran ni dans logcat:

    public void onCreate(Bundle savedState)
    {
       Log.d("SimpleActivity", "OnCreate Started");

       super.onCreate(savedState);
       setContentView(R.layout.simple);

       Log.d("SimpleActivity", "OnCreate Ended");
    }

Remarque : J'ai appelé le constructeur de base dans onCreate() avec super.onCreate(savedState) dans mon code ci-dessus.

383voto

Rock Lee Points 130

Ce qui m'est arrivé, c'est que j'ai remplacé la mauvaise méthode onCreate. J'ai remplacé public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) alors que j'aurais dû remplacer protected void onCreate(@Nullable Bundle savedInstanceState). Peut-être que cela aidera quelqu'un !

10voto

Il est possible que onCreate ne soit pas appelé, si l'activité n'a jamais été détruite, si pour une raison quelconque une activité traîne, la prochaine fois qu'elle est instanciée, elle n'est pas recréée mais simplement reprise...

C'est du moins ce avec quoi je suis en train de lutter actuellement dans mon code... Le cycle de vie des activités semble être une explication logique.. Cependant 99 % du temps je compte sur le fait que onCreate est appelé lors du démarrage de l'activité et cela ne me déçoit pas....

Édition : Et bien sûr c'est parce que je n'appelais pas finish() en quittant l'activité. Doh.

3voto

Sermilion Points 509

Ceci n'est pas lié à ce problème particulier, mais cela peut aussi arriver lorsque l'activité n'est pas déclarée dans le fichier manifeste

2voto

Faites attention si votre méthode appartient à AppCompatActivity ou Activity.

Cela dépend de ce que vous avez implémenté dans votre classe

Si vous voulez ajouter des méthodes du cycle de vie ou tout autre méthode d'annulation, je vous recommande d'appuyer sur CTRL+O ou de faire Code > Override methods et là vous pouvez voir où la méthode appartient

Capture d'écran à des fins illustratives - Boîte de dialogue

2voto

ramya Points 11

Supprimer android:launchMode="singleTask" du manifest

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X