Android 静态类中的活动上下文
示例
通常,您会希望将一些Android类包装在易于使用的实用程序类中。这些实用程序类通常需要上下文来访问android操作系统或应用程序的资源。一个常见的示例是SharedPreferences类的包装。为了访问Android的共享首选项,必须编写:
context.getSharedPreferences(prefsName,mode);
因此,可能会想创建以下类:
public class LeakySharedPrefsWrapper
{
private static Context sContext;
public static void init(Context context)
{
sContext = context;
}
public int getInt(String name,int defValue)
{
return sContext.getSharedPreferences("a name", Context.MODE_PRIVATE).getInt(name,defValue);
}
}现在,如果您init()使用活动上下文进行调用,则LeakySharedPrefsWrapper将保留对您的活动的引用,以防止对其进行垃圾收集。
如何避免:
调用静态帮助器函数时,可以使用以下命令在应用程序上下文中发送context.getApplicationContext();
创建静态帮助器函数时,可以从给定的上下文中提取应用程序上下文(调用getApplicationContext()应用程序上下文会返回应用程序上下文)。因此,对我们的包装器的修复很简单:
public static void init(Context context)
{
sContext = context.getApplicationContext();
}如果应用程序上下文不适合您的用例,则可以在每个实用程序函数中包括一个Context参数,应避免保留对这些上下文参数的引用。在这种情况下,解决方案如下所示:
public int getInt(Context context,String name,int defValue)
{
//不要保留上下文的引用以避免潜在的泄漏。
return context.getSharedPreferences("a name", Context.MODE_PRIVATE).getInt(name,defValue);
}
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短