2010-12-09 6 views
2

Je vais avoir une activité A l'écoute de quelqu'un qui secoue l'appareil. Cela peut se produire même lorsque l'utilisateur est sur l'activité B. Lorsque l'appareil est secoué, j'ai besoin d'afficher une boîte de dialogue de progression et j'ai donc besoin du bon contexte. Comme la fonction shake est de l'activité A, son semble que parfois this mot-clé que j'utilise pour le contexte n'est pas correct (comme je suppose que son activité B que le contexte correct) et je reçois genre d'exception fenêtre mauvais jeton ...Comment accéder au contexte actuel à partir d'une activité qui n'est pas au premier plan?

Je résume ... L'activité B est l'avant-plan. L'utilisateur secoue l'appareil. L'activité A réagit au tremblement et veut afficher quelque chose mais l'activité A n'est pas actuellement au premier plan. L'activité A qui utilise le mot-clé this en tant que contexte actuel plante parfois avec un jeton d'exception de fenêtre. Comment puis-je obtenir un contexte correct et stable?

Répondre

2

Vous pouvez enregistrer le contexte de l'activité A dans une classe Application, qui agit comme un singleton global.

public class ApplicationController extends Application { 
    private static ApplicationController _appCtrl; 
    private Context mActivityAContext; 

    public static ApplicationController getAppCtrl() 
    { 
     return _appCtrl; 
    } 

    public void setContextForActivityA(Context context) 
    { 
     mActivityAContext = context; 
    } 

    public Context getContextForActivityA() 
    { 
     return mActivityAContext; 
    } 

    public void onCreate() 
    { 
     // Initialize the AppController class 
     super.onCreate(); 
    ApplicationController._appCtrl = this; 
    } 

} 

Maintenant, vous pouvez définir le contexte de l'activité A dans la méthode setter et obtenez de partout dans votre application avec:

ApplicationController.getContextForActivityA(); 

Mais soyez très prudent avec les fuites de mémoire lorsque vous passez un contexte d'activité à d'autres activités. Voir link text

+0

pouvez-vous s'il vous plaît jeter un oeil à cela http://stackoverflow.com/questions/30350328/global-class-to-register-listeners-for-all-the-activities-in-android – inquisitive

+0

C'est une bonne idée . Je vous remercie! – confile

1

Ce n'est pas une bonne idée de sauvegarder le contexte d'une activité ailleurs, car vous risquez de rencontrer des fuites de mémoire pendant le cycle de vie de l'application. Si vous stockez le contexte dans une autre classe, l'activité ne peut pas être nettoyée par le récupérateur de place car l'autre classe contient toujours une référence à son contexte.

Vous devriez penser à faire trembler le code de reconnaissance indépendamment de votre activité.

+0

pouvez-vous s'il vous plaît jeter un oeil à cela http://stackoverflow.com/questions/30350328/global-class-to-register-listeners-for-all-the-activities-in-android – inquisitive

Questions connexes