android - 安卓:ApplicationContext 类
问题描述
我的应用程序使用了几个具有需要上下文的静态方法的辅助类,为此我创建了一个“ApplicationContext”类,如下所示:
import android.app.Activity;
import android.content.Context;
public class ApplicationContext {
private Context appContext;
private static ApplicationContext instance;
private ApplicationContext(){}
public void init(Context context)
{
appContext = context;
}
private Context getContext()
{
return appContext;
}
public static Context get()
{
return getInstance().getContext();
}
public static Activity getActivity()
{
return (Activity)getInstance().getContext();
}
public static Context getApplicationContext()
{
return get().getApplicationContext();
}
public static ApplicationContext getInstance()
{
return instance == null ? instance = new ApplicationContext(): instance;
}
}
并且在每个活动的 onCreate 方法中,我都像这样设置当前上下文:
ApplicationContext.getInstance().init(this);
有了这个,我可以在任何需要的地方获取当前上下文或活动的实例,如下所示:
ApplicationContext.get();
ApplicationContext.getActivity();
一切正常,但我不确定这是否被认为是一种好的做法。
另一种选择是声明一个静态上下文,如下所示:
public WeakReference<Context> context;
在我需要它的 -non activity- 类中,将其设置在使用该类的活动中,如下所示:
whateverclassname.context = this;
并像访问它一样
if (context!=null) ... context.get()
首先,我想知道第一种方法是否是好的做法,然后,如果不是,我想知道这两种方法中哪一种是最好的,或者关于如何处理非上下文环境需求的任何建议- 活动课程。
解决方案
据我所知,静态弱参考是一种很好的做法。
我建议你按照我的这个答案
推荐阅读
- python - 数据库查询的结果不会加载到烧瓶模板中
- r - 从 0 到 24 小时在同一个图中绘制变量不同天的值
- r - 未找到 Highcharter 包 - highchart 功能不可用
- python - python - 如何使用python中的第二个键对对列表进行排序?
- python - 如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?
- ios - 为什么 SKSpriteNode(fileNamed:) 使用 Swift 在 iOS 中生成 nil?
- android - Android(sqlite) 如何使用 where 子句查看数据?
- .net-traceprocessing - .net-traceprocessing 如何使用WaitAnalysis?
- c# - 如何防止在构造函数完成之前调用事件处理程序?
- python - 编码 Scrapy 输出以允许使用法语字母