158 votes

Cycle de vie onNewIntent () et auditeurs enregistrés

Je suis à l'aide d'un singleTop Activité pour recevoir les intentions d'une recherche-dialogue via onNewIntent().

Ce que j'ai remarqué c'est qu' onPause() avant onNewIntent(), et puis, ensuite, il appelle onResume(). Visuellement:

  • boîte de dialogue de recherche initié
  • de l'intention de recherche a tiré à l'activité
  • onPause()
  • onNewIntent()
  • onResume()

Le problème est que j'ai auditeurs enregistré dans onResume() qui sont supprimés en onPause(), mais ils sont nécessaires à l'intérieur de l' onNewIntent() appel. Est-il un moyen standard pour faire de ces auditeurs disponible?

311voto

Rodja Points 2166

onNewIntent() est conçu comme point d'entrée pour singleTop activités qui déjà quelque part d'autre dans la pile et donc ne peut pas appeler onCreate(). Les activités du cycle de vie du point de vue, il est donc nécessaire d'appeler onPause() avant onNewIntent(). Je vous suggère de réécrire votre activité à ne pas utiliser ces écouteurs à l'intérieur de onNewIntent(). Par exemple, la plupart du temps dans ma onNewIntent() méthodes ressemble simplement à ceci:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // getIntent() should always return the most recent
    setIntent(intent);
}

Avec tous les d'installation de la logique qui se passe dans onResume() en utilisant getIntent().

17voto

Pawan M Points 4396

OnNewIntent () est toujours appelé pour les activités singleTop / Task sauf la première fois que l'activité est créée. A ce moment, onCreate est appelé.

Vous pouvez toujours invoquer onNewIntent en le mettant dans la méthode onCreate telle que

 @Override
public void onCreate(Bundle savedState)
{
    super.onCreate(savedState);
    onNewIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) 
{
  super.onNewIntent(intent);
  //code
}
 

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