android 设置界面非活动,android:如何使用非活动/服务类的getApplication和getApplicationContext...

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

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

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

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

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

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

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

我有大量不同的xml提要解析并更新全局变量或基于不同的场景插入到sqlite ...所以不是创建一个新的xml解析器类我想简单的目的,最好和最简单的方法是创建一个xml解析器类,负责处理所有场景的所有xml解析逻辑。我有通过应用程序类共享的全局变量,对于sqlite,我有一个单例数据助手类(也通过应用程序类公开),因此需要在帮助器类中使用getApplication()或getApplicationContext()

然后将您的活动的上下文传递给帮助者。请注意,通过在多个位置共享所有内容,您将创建紧密耦合的设计。

请举个代码示例。

这对于在活动生命周期之外泄漏活动上下文是错误的。您应该将WeakReference之类的内容用于您发送给活动之外的任何帮助对象的上下文

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

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

Test test = new Test(this);

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

public Class Test

{

public Activity activity;

public Test (Activity act)

{

this.activity = act;

// Now here you can get getApplication()

}

}

你的方式很好。它非常有用,但是当我们通过意图调用服务类时该怎么办? LIKE Intent myIntent = new Intent(context,AutoSyncService.class);"AutoSyncService"是我的服务类,而不是如何在该类中使用上下文?

试试这个dev2qa.com/…

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

试试这个:

<5233>

这样安全吗?这不会抛出一些例外吗?我总是害怕铸件..

@MarcoCastanho是的,它在上下文是服务时失败了。但是,您通常应该在调用时知道您将使用哪个上下文。

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

public class MyApplication extends Application {

private static Context sContext;

@Override

public void onCreate() {

super.onCreate();

sContext=   getApplicationContext();

}

public static Context getContext() {

return sContext;

}

并在Helper类中调用MyApplication.getContext()

传入上下文(以便您可以访问资源),或使辅助方法保持静态。

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

如果要传递上下文的实例本身是静态的或由另一个静态对象引用,那么这应该只是一个问题。如果您使用的是Android Studio,检查员将能够发现大多数此类问题。

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

public class WebService {

private Activity activity;

public WebService(Activity _activity){

activity=_activity;

helper=new Helper(activity);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值