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

时间:2011-03-17 13:51:34

标签: android

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

我可以在所有活动中使用getApplication()方法。

但是,我创建了一些自定义助手类;例如,XMLHelper类不从任何活动/服务类继承。

此处getApplication()方法不可用。

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

8 个答案:

答案 0 :(得分:54)

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

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

答案 1 :(得分:27)

getApplication()方法位于Activity类中,因此每当您想要非活动类中的getApplication()时,您必须将Activity实例传递给构造函数非活动课。

假设test是我的非活动类:

Test test = new Test(this);

在那个班级我创建了一个构造函数:

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

答案 2 :(得分:20)

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

试试这个:

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

答案 3 :(得分:2)

传入一个Context(这样你就可以访问资源),或者让helper方法保持静态。

答案 4 :(得分:2)

为了避免传递这个参数,我使用派生自Application

的类
Borders

并在Helper类中调用public class MyApplication extends Application { private static Context sContext; @Override public void onCreate() { super.onCreate(); sContext= getApplicationContext(); } public static Context getContext() { return sContext; }

答案 5 :(得分:1)

将活动上下文发送到其他类可能会导致内存泄漏,因为保持该上下文活动是GC无法处置该对象的原因

答案 6 :(得分:0)

试试这个,在构造函数中调用activity

public class WebService {
private Activity activity;

        public WebService(Activity _activity){
            activity=_activity;
            helper=new Helper(activity);

        }
}

答案 7 :(得分:0)

((MyApplication) getApplicationContext()).myMethod()