2

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

我继续... 活动 B 是前台。用户摇晃设备。活动 A 正在对震动做出反应并希望显示某些内容,但活动 A 当前不是前景。使用this关键字作为当前上下文的活动 A 有时会因窗口异常错误令牌而崩溃。如何获得正确稳定的上下文?

4

2 回答 2

2

您可以将 Activity 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 上下文传递给其他 Activity 时,要非常小心内存泄漏。见链接文字

于 2010-12-09T11:49:18.510 回答
1

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

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

于 2010-12-09T12:27:21.070 回答