android:如何使用非活动/服务类的getApplication和getApplicationContext

Raj*_*Raj 47 android

我在Android上使用扩展应用程序类来在整个应用程序中共享我的数据.

我可以使用getApplication()我所有活动中的方法.

但是,我创建了一些自定义帮助程序类; 例如,一个XMLHelper不从任何活动/服务类继承的类.

这里的getApplication()方法不可用.

我该如何解决这个问题以及解决这个问题的最佳设计方法是什么?

mgv*_*mgv 55

getApplication()方法位于Activity类中,这就是您无法从助手类访问它的原因.

如果您确实需要从帮助程序访问应用程序上下文,则应该保留对活动上下文的引用,并将其调用传递给帮助程序.

  • 这对于在活动生命周期之外泄漏活动上下文是错误的.您应该将WeakReference之类的内容用于您发送给活动之外的任何帮助程序对象的上下文 (3认同)

Chi*_*rag 27

getApplication()方法位于Activity类中,因此无论何时 getApplication()在非活动类中,您都必须将Activity实例传递给该非活动类的构造函数.

假设测试是我的非活动类:

Test test = new Test(this);
Run Code Online (Sandbox Code Playgroud)

在那个类中,我创建了一个构造函数:

 public Class Test
 {
    public Activity activity;
    public Test (Activity act)
    {
         this.activity = act;
         // Now here you can get getApplication()
    }
 }
Run Code Online (Sandbox Code Playgroud)


Som*_*ent 20

将Context对象转换为Activity对象可以很好地编译.

试试这个:

((Activity) mContext).getApplication(...)

  • 这样安全吗?这不会抛出一些例外吗?我总是害怕铸件.. (4认同)