我正在开展活动A听某人摇动设备。即使用户正在进行活动B,也会发生这种情况。当设备被动摇时,我需要显示进度对话框,因此我需要正确的上下文。就像摇动函数在活动A中一样,它看起来有时我用于上下文的this
关键字不正确(因为我猜它的活动B是正确的上下文)并且我得到了一种窗口异常坏标记。 ..
我恢复......
活动B是前景。用户摇动设备。活动A对摇动作出反应并希望显示某些内容,但活动A当前不是前景。使用this
关键字作为当前上下文的活动A有时会因窗口异常错误令牌而崩溃。我怎样才能获得正确和稳定的背景?
答案 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)
将活动的上下文保存在其他地方并不是一个好主意,因为在应用程序的生命周期中可能会遇到内存泄漏。如果将上下文存储在另一个类中,则垃圾收集器无法清除活动,因为另一个类仍保留对其上下文的引用。
你应该考虑让你以某种方式独立于你的活动来动摇识别代码。