Android:应用程序上下文 class
Android: ApplicationContext class
我的应用程序使用多个助手 classes 和需要上下文的静态方法,为此我创建了一个 "ApplicationContext" class 如下:
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;
}
}
并且在每个 activity onCreate 方法中,我将当前上下文设置如下:
ApplicationContext.getInstance().init(this);
有了这个,我可以在任何需要的地方获取当前上下文或 activity 的实例,如下所示:
ApplicationContext.get();
ApplicationContext.getActivity();
一切正常,但我不确定这是否是一种好的做法。
另一种选择是声明一个静态上下文,如下所示:
public WeakReference<Context> context;
in -non activity- classes 在我需要的地方,将它设置在使用 classes 的活动中,如下所示:
whateverclassname.context = this;
并像
一样访问它
if (context!=null) ... context.get()
首先,我想知道第一种方法是否是好的做法,然后,如果不是,我想知道这两者中哪一个最好,或者关于如何处理需求的任何建议非activity classes.
中的上下文
据我所知,静态弱引用是一种很好的做法。
我建议你关注我的 this answer
不要这样做!上下文基本上有两个级别:一个是应用程序上下文,您可以在您的 Activity 中获取或子 classing 应用程序 class 并在 manifest.xml 中提及它。另一个是 Activity 上下文,它一直存在,直到 activity 没有被销毁。
您必须使用应用程序上下文,您认为操作独立于您的 activity/fragment。您可以使用 Application sub-class 自由访问它,例如MyApplication.getInstance()(这里,MyApplication 扩展了 Application,getInstance() 提供了它的实例)
您必须使用 Activity 上下文,将 activity 实例直接传递给上下文引用变量,您认为操作必须在 Activity 范围内。将 activity 实例保存在另一个 class 的静态变量中将泄漏 Activity 对象。
我的应用程序使用多个助手 classes 和需要上下文的静态方法,为此我创建了一个 "ApplicationContext" class 如下:
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;
}
}
并且在每个 activity onCreate 方法中,我将当前上下文设置如下:
ApplicationContext.getInstance().init(this);
有了这个,我可以在任何需要的地方获取当前上下文或 activity 的实例,如下所示:
ApplicationContext.get();
ApplicationContext.getActivity();
一切正常,但我不确定这是否是一种好的做法。
另一种选择是声明一个静态上下文,如下所示:
public WeakReference<Context> context;
in -non activity- classes 在我需要的地方,将它设置在使用 classes 的活动中,如下所示:
whateverclassname.context = this;
并像
一样访问它if (context!=null) ... context.get()
首先,我想知道第一种方法是否是好的做法,然后,如果不是,我想知道这两者中哪一个最好,或者关于如何处理需求的任何建议非activity classes.
中的上下文据我所知,静态弱引用是一种很好的做法。
我建议你关注我的 this answer
不要这样做!上下文基本上有两个级别:一个是应用程序上下文,您可以在您的 Activity 中获取或子 classing 应用程序 class 并在 manifest.xml 中提及它。另一个是 Activity 上下文,它一直存在,直到 activity 没有被销毁。
您必须使用应用程序上下文,您认为操作独立于您的 activity/fragment。您可以使用 Application sub-class 自由访问它,例如MyApplication.getInstance()(这里,MyApplication 扩展了 Application,getInstance() 提供了它的实例)
您必须使用 Activity 上下文,将 activity 实例直接传递给上下文引用变量,您认为操作必须在 Activity 范围内。将 activity 实例保存在另一个 class 的静态变量中将泄漏 Activity 对象。