2010-12-09 40 views
2

我正在进行活动聆听晃动设备的人。即使用户处于活动B状态,也可能发生这种情况。设备被动摇时,我需要显示进度对话框,因此我需要正确的上下文。像动摇功能是在活动A,其出现有时this关键字,我用于上下文是不正确的(因为我猜它的活动B作为正确的上下文),我得到一种窗口异常坏令牌...如何从不是前景的活动访问当前上下文?

我继续... 活动B是前景。用户摇动设备。活动A对摇动作出反应并想要显示某些内容,但活动A当前不在前台。使用this关键字作为当前上下文的活动A有时会与窗口异常不良令牌一起崩溃。我如何才能获得正确和稳定的环境?

回答

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方法,并与来自世界各地得到它在你的应用程序:

ApplicationController.getContextForActivityA(); 

但是当你传递一个活动方面非常小心内存泄漏到其他活动。请参阅link text

+0

你可以请看看这个http://stackoverflow.com/questions/30350328/global-class-to-register-listeners-for-all-the-activities-in-android – inquisitive 2015-05-21 05:24:20

+0

这是一个好主意。谢谢! – confile 2015-10-05 19:33:43

1

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

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

相关问题