2011-04-01 4 views
8

Une des classes que j'ai écrit doit réagir lorsque les événements d'activité suivants se produisent:Faire un objet écouter les événements de cycle de vie d'activité?

  • onStart()
  • OnPause()
  • onResume()
  • onStop()

Je peux réagir à ceux de l'activité elle-même:

Classe publique Activité étendue Applicatio nContext { protected void onCreate (Regrouper savedInstanceState);

protected void onStart(); 

protected void onRestart(); 

protected void onResume(); 

protected void onPause(); 

protected void onStop(); 

protected void onDestroy(); 

}

de l'activité que je pourrais dire l'objet en question qu'un événement a eu lieu, mais je ne l'aime pas cette idée: il exige le développeur de mettre en œuvre la logique en dehors de mon objet/classe. Idéalement, je voudrais que l'objet soit responsable de l'enregistrement de ces événements et se positionne comme un auditeur indépendant de l'activité.

Des idées? Merci d'avance.

Répondre

7

Le niveau API 14 a Application.ActivityLifecycleCallbacks.
Avant cela, afaik, désolé, non.
Si vous souhaitez offrir votre classe à d'autres, vous devrez soit fournir des classes abstraites qui étendent les activités les plus courantes, ou les ont mis certains appels dans leurs propres méthodes du cycle de vie de l'activité, comme

protected void onPause() { 
    super.onPause(); 
    yourClassInstance.onPause(); 
}

mai, bien le rendre plus général, et créer des classes NotifyingActivity abstraites qui acceptent NotifyingActivity.LifecycleListener, et rendre votre classe implémenter un tel écouteur et s'enregistrer dans son constructeur.

+1

Un exemple d'utilisation 'Application.ActivityLifecycleCallbacks', peut être utile à quelqu'un: https://gist.github.com/alexjlockwood/6298122 – gustavohenke

-1

Vous pouvez utiliser this library qui fait exactement ce que vous essayez de faire, sans avoir à écrire du code dans votre activité ou dans votre activité de base.

et est très simple à utiliser:

ActivityListener.bind(mActivity).with(mCallback); 

Peut-être que cela aide quelqu'un