Как получить доступ к текущему контексту из действия, которое не является передним планом? - PullRequest
2 голосов
/ 09 декабря 2010

У меня активность. Слушаю, как кто-то трясет устройство. Это может произойти, даже когда пользователь находится в режиме активности B. Когда устройство встряхивается, мне нужно отобразить диалоговое окно прогресса, и мне так нужен правильный контекст. Как и функция встряски в действии A, кажется, что иногда ключевое слово this, которое я использую для контекста, является неправильным (так как я предполагаю, что его действие B является правильным контекстом), и я получаю вид исключения окна плохой токен ...

я возобновляю ... Деятельность B на переднем плане. Пользователь качает устройство. Деятельность A реагирует на дрожание и хочет что-то отобразить, но активность A в настоящее время не является приоритетной. Упражнение A, использующее ключевое слово this в качестве текущего контекста, иногда дает сбой из-за неверного токена исключения из окна. Как я могу получить правильный и стабильный контекст?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Вы можете сохранить контекст действия A в классе Application, который действует как глобальный синглтон.

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;
   }

}

Теперь вы можете установить контекст для действия A в методе сеттера и получать его отовсюдув вашем приложении:

ApplicationController.getContextForActivityA();

Но будьте очень осторожны с утечками памяти, когда вы передаете контекст Activity другим действиям.См текст ссылки

1 голос
/ 09 декабря 2010

Не очень хорошая идея сохранять контекст действия где-то еще, так как вы можете столкнуться с утечками памяти во время жизненного цикла приложения.Если вы храните контекст в другом классе, сборщик мусора не сможет очистить Activity, так как другой класс по-прежнему содержит ссылку на свой контекст.

Вам следует подумать о том, чтобы заставить ваш код распознавания встряхнуть каким-либо образом от вашей деятельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...