如何从非前台的活动访问当前上下文?

时间:2010-12-09 11:10:17

标签: android android-context

我正在开展活动A听某人摇动设备。即使用户正在进行活动B,也会发生这种情况。当设备被动摇时,我需要显示进度对话框,因此我需要正确的上下文。就像摇动函数在活动A中一样,它看起来有时我用于上下文的this关键字不正确(因为我猜它的活动B是正确的上下文)并且我得到了一种窗口异常坏标记。 ..

我恢复...... 活动B是前景。用户摇动设备。活动A对摇动作出反应并希望显示某些内容,但活动A当前不是前景。使用this关键字作为当前上下文的活动A有时会因窗口异常错误令牌而崩溃。我怎样才能获得正确和稳定的背景?

2 个答案:

答案 0 :(得分:2)

您可以将活动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;
   }

}

现在,您可以在setter方法中设置活动A的上下文,并从应用程序的任何位置获取它:

ApplicationController.getContextForActivityA();

但是,将Activity上下文传递给其他活动时要非常小心内存泄漏。见link text

答案 1 :(得分:1)

将活动的上下文保存在其他地方并不是一个好主意,因为在应用程序的生命周期中可能会遇到内存泄漏。如果将上下文存储在另一个类中,则垃圾收集器无法清除活动,因为另一个类仍保留对其上下文的引用。

你应该考虑让你以某种方式独立于你的活动来动摇识别代码。