android - 在 Android 应用程序的生命周期中维护属性/值、持久化和访问它们的最佳实践?
问题描述
我正在构建我的第一个 Android 应用程序。我需要为每个 web api 调用添加一组特定的标头,并希望它们即使在应用程序关闭时也能保持不变。我在共享首选项中实现了它们,但现在我需要为每个调用拖动一个上下文,这似乎是一种糟糕的做事方式。我想在应用程序初始化时设置值。让 WebAPIHelper 对象可以轻松使用它们,当值更改时,保存它们。我正在使用 Room,所以我可以将它们保存在那里。
使用 LiveData 或扩展应用程序对象以访问在我的 WebAPIHelper 等对象中使用的值是标准做法,还是有另一种更好的方法?最好将这些值保存在数据库或 SharedPreferences 中?
更新
我已经看到了一些扩展应用程序对象的例子,比如这里和这里。我想从 sharedpreferences onCreate 中获取值并通过调用 setXXX 将它们保存到 sharedpreferences 中,但我还没有让它工作。
我也担心我在一篇文章中发现的这个说法:
“在 Application 对象中存储数据很容易出错,并且可能会导致您的应用程序崩溃。如果以后确实需要将全局数据存储在磁盘上,或者在意图的附加组件中明确传递给您的活动,则更喜欢将其存储在磁盘上。”
这意味着我需要一直将标头值传递给 WebAPIHelper 对象。我现在到处传递上下文对象,所以我猜它是一个的 6 个和另一个的 1/2 个。
另一种方法可能是在 BaseViewModel 中扩展 AndroidViewModel 类,从 SharedPreferences 添加属性,以便它们可通过应用程序中的所有 ViewModel 使用。有人这样做过吗?
解决方案
推荐阅读
- selenium - 如何在 Robot Framework 中处理缓慢的页面加载?
- docker - docker中的气流:初始化气流并登录网络服务器的问题
- vpn - 将 PC 从睡眠状态唤醒后 SSLVPN NetExtender 未重新连接
- excel - 复制 Google 表格 {array1; array2} 函数在 Microsoft Excel 中作为用户定义函数
- error-handling - *** [Makefile:666: all-recursive] 错误 1
- reactjs - 在哪里设置反应路由器标签?
- flutter - 嵌套颤振手势检测器不起作用
- ios - 着色器首次出现在 SpriteKit 相机的视口中时会导致故障
- azure - 未能将设备加入到 Azure 混合广告
- java - 在 Android Studio 中为 Java 应用设置主题颜色