在每个活动中使用共享首选项
Posted
技术标签:
【中文标题】在每个活动中使用共享首选项【英文标题】:Using Shared Preferences in every activity 【发布时间】:2013-09-08 11:20:49 【问题描述】:我希望在每个活动中都能访问我的应用程序首选项。我不想在每个活动中都获得所有 SharedPreferences。而是获取一次 SharedPreferences,并拥有一个全局对象,该对象具有所有这些首选项的值,例如 if (AppSettings.isSoundOn()) // do stuff
,并且该对象随处可用,没有 if 和 buts。
我尝试使用静态类,但您无法从静态类获取共享首选项。此外,您获得 SharedPreferences 的类似乎必须扩展 Activity,否则会产生错误。
我确信通常有一种非常简单的方法可以做到这一点,因为它是基本的应用程序功能,但我所拥有的 android 开发书籍实际上都没有涵盖如何处理应用程序范围的偏好,以及我能找到的任何教程只介绍设置和获取 SharedPreferences,这很简单,但您必须在每个活动中都这样做。
【问题讨论】:
扩展Application
类。 ***.com/questions/4051875/…
【参考方案1】:
创建一个类似MyApplication
的类并从android.app.Application
扩展。
在那里您可以访问共享首选项。
在每个活动中,您都可以使用MyApplication app = (MyApplication)this.getApplication();
获得Application
在 MyApplication 中放置一个获取 Sharedpreference 和存储它的公共方法。
【讨论】:
好的,这行得通,但是MyApplication app = (MyApplication)this.getApplication();
是做什么的? (特别是(MyApplication)this.getApplication()
部分。另外,这是否意味着每次我想访问设置时,MyApplication 类的onCreate()
都必须运行并执行它所做的任何事情(在这种情况下从 SharedPreferences 读取) ? 仅仅得到几个布尔值不是很浪费吗?
不,MyApplication 的 onCreate() 只运行一次,当应用程序第一次启动时,直到它被销毁(用户从最近的应用程序中删除它,在应用程序设置中停止它,或者系统停止它,因为它需要内存)。 getApplication() 始终为您提供应用程序的应用程序类。您必须将其转换为 MyApplication 才能使用您放入其中的方法以上是关于在每个活动中使用共享首选项的主要内容,如果未能解决你的问题,请参考以下文章