2010-04-20 21 views
5

我有一个静态喜好类,它包含一些应用程序首选项和类似的东西。可以在那里存储对ApplicationContext的引用吗?我需要那个引用,所以我可以在不继承Activity的类中获得缓存文件夹和类似的东西。Android - 存储引用到ApplicationContext

回答

6

如果您不是it can cause significant memory leaks,那么您有权在那里使用ApplicationContext

但是,您遇到的问题是static变量可能不会保留其值。由于Android处理应用程序的方式,您的应用程序可能会被终止然后重新启动 - 通常是因为用户切换到其他应用程序 - 这样一来,您的static变量将变为空值,并且您的代码将其设置为“运行。 Have a look at this question for a more detailed answer

解决此问题或许是可能的,但测试可能导致变量最终结果为null的所有可能性会很耗时且容易出错。所以在我的静态偏好类中,我已经提出了任何需要Context作为参数的方法。例如:

static int getSomeIntegerPreference(Context context) { 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0); 
} 

这是丑陋的,但它的工作原理。

+0

嗯,我设置我的Preferences.applicationContext getApplicationContent()在第一次活动开始。所以我认为它应该在那里,除非应用程序死亡(VM死亡,进程得到杀手等)。如果它死了,在下次启动时它会再次初始化Preferences.applicationContext,所以我认为它应该可以正常工作。 我需要类似的东西,因为我需要在某些没有看到getApplicationContext()的类中访问上下文。例如我的类别类需要下载每个类别的图标,所以我把icon_path设置为这个。 filepath = Preferences.applicationContext.getCacheDir()。toString – nixa 2010-04-20 09:02:57

+1

您将需要在* every * Activity中使用您的'Preferences'类来初始化'Preferences.applicationContext'。当您为第一个Activity运行不同的Activity时,您的进程可能会被杀死,Android可以将用户返回到应用程序中的该点,从而跳过第一个Activity。 – 2010-04-20 09:58:09