2010-01-14 5 views
11

Existe-t-il quelque chose comme une application globale onPause() et onResume()?Android: application globale onPause() et onResume()?

Mon activité principale est l'écoute des correctifs GPS, que je souhaite continuer à utiliser lors du passage à un autre écran/activité. Pour cette raison, je ne peux pas désinscrire mon LocationListener dans les activités onPause() de l'activité. Cependant, je veux toujours désinscrire mon récepteur GPS lorsque je passe à une autre application (donc économiser la batterie) et le rallumer lorsque je retourne à mon application, quel que soit l'écran/l'activité dans lequel l'utilisateur est actuellement.

Des idées?

Répondre

12

Y a-t-il quelque chose comme une application global onPause() et onResume()?

Non, désolé.

Mon activité principale écoute GPS fixe, que je veux continuer à travailler lors du passage à un autre écran/activité . Par conséquent, je ne peux pas annuler l'inscription de mon LocationListener dans l'onPause() de l'activité . Cependant, je reste veux désenregistrer mon écouteur GPS lors du passage à une autre application (afin d'économiser la batterie) et de le remettre sur lors du retour à ma demande, quel que soit ce que l'écran/activité l'utilisateur est actuellement.

est ici une approche possible:

Étape # 1: Déplacer la logique LocationListener dans un Service, que les activités se connecter à travers le modèle de liaison locale ou quelque chose. Également avoir au moins un appel de service startService(), donc un unbindService() ne fera pas disparaître le Service (en supposant que vous utilisez le modèle de liaison locale). Étape # 2: Faites appel aux activités dans le service pendant onPause() et onResume()

Étape # 3: Faire en sorte que le service maintienne un compte de référence des activités en cours. Étape n ° 4: Lorsque le compte de référence atteint zéro, demandez au service de se réveiller par l'intermédiaire d'une minuterie et TimerTask. En outre, annulez TimerTask si le nombre de références est incrémenté. Étape n ° 5: Le TimerTask doit éteindre le GPS si jamais il est exécuté.

Le net est que vous ne libérerez que le GPS après un certain nombre d'inactivité. Cette inactivité pourrait être pour n'importe quelle raison.

+0

Merci beaucoup pour cette marque détaillée explaination. – znq

+1

Nouveauté de l'API 14, ActivityLifecycleCallbacks. http://stackoverflow.com/questions/3667022/android-is-application-running-in-background/13809991#13809991 – Amozoss

+0

cette réponse est-elle toujours la même pour 2016>? un cycle de vie d'activité global serait très utile! – commonSenseCode

6

Vous pouvez créer une classe d'application et si elle implémente l'application.ActivityLifecycleCallbacks

public class AppController extends Application implements Application.ActivityLifecycleCallbacks 
{ 

    @Override 
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
     Toast.makeText(this, "----------onCreate()---------", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
     Log.i("ApplicationName","----------onActivityStarted()---------"); 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("ApplicationName","----------onActivityResumed()---------"); 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Toast.makeText(this, "----------onActivityPaused()---------", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
     Log.i("ApplicationName","----------onActivityStopped()---------"); 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
     Log.i("ApplicationName","----------onActivitySaveInstanceState()---------"); 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 

    } 
} 

Ensuite appel de votre activité

@Override 
protected void onPause() { 
    AppController controller=(AppController)getApplicationContext(); 
    controller.onActivityPaused(Main3Activity.this); 
    super.onPause(); 
} 
Questions connexes