Basé sur votre description Je risque de deviner que vous vérifiez l'état dans onCreate
. Pendant le onCreate
l'état du cycle de vie est seulement INITIALIZED
.
Voir ce diagramme de Google. Cela signifie que vous pouvez utiliser la bibliothèque d'annotations pour observer lorsque vous avez entré l'état STARTED
.
@OnLifecycleEvent(Lifecycle.EVENT.ON_START)
void doSomething(){
//do the thing that needs the lifecycle to be at least started
}
Cela dit cela est appelé après chaque onStart est terminé. Il peut donc être prudent de faire une certaine logique pour déterminer si c'est le bon moment pour faire les choses qui doivent être faites.
De même, pour que ce code fonctionne, la classe qui doit observer l'événement Lifecycle doit implémenter LifecycleObserver
. Cela pourrait être n'importe quelle classe ou même l'activité ou le fragment lui-même. Le code ci-dessous est pour une classe générale/module qui agira comme un observateur Lifecycle.
public class LifeCycleObserverModule implements LifecycleObserver {
LifeCycleObserverModule(Lifecycle lifecycle) {
//register the life cycle to observe
this.lifecycle = lifecycle;
this.lifecycle.addObserver(this);
}
}
Si vous deviez faire une activité observer son propre cycle de vie, il serait quelque chose comme:
public class MainActivity extends AppCompatActivity implements LifecycleObserver {
@Override
protected void onCreate(Bundle savedInstanceState) {
getLifecycle().addObserver(this)
}
}
Pour un fragment, il fonctionne de la même, mais il observateur pourrait-il son propre cycle de vie ou celle de la activité. Si vous voulez observer le cycle de vie de l'activité, vous pouvez le faire. Sinon, ce serait la même chose que pour l'exemple d'activité ci-dessus.
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getActivity().getLifecycle().addObserver(this);
}
Une note finale, je ne suis pas tout à fait clair sur si une activité ou Fragment observant son propre cycle de vie est la meilleure pratique. Mais cela fonctionne, et il ne semble pas y avoir de conséquences néfastes. J'utilise actuellement la méthode ci-dessus dans quelques applications sur lesquelles je travaille.
EDIT: a corrigé l'exemple de code. Il était utilisé pour dire @OnLifecycleEvent(Lifecycle.EVENT.STARTED)
comme cela a été souligné dans un commentaire STARTED
n'existe pas, la valeur correcte était ON_START
. Désolé pour le mélange.
Vous avez le même problème pour le fragment appCompat. Pablo, connaissez-vous la solution pour cela? –
Non désolé, je n'ai pas utilisé cette api plus –