2017-07-03 43 views
2

我正在构建一个Android应用程序,它有一个用于保存用户配置文件信息的类User。当创建用户时,它会保存在SharedPreferences文件中,以便我可以加载最后创建的用户,然后下次启动该应用程序。我还有一个Singleton类,它保存新创建的用户的对象,以便其他类可以使用它。我这样做是为了避免每次更改Fragment并且需要用户时都阅读SharedPreferences文件。我的问题是:是否使用Singleton将整个应用程序的变量保存在内存中?它是为此目的还是有另一种方法来保持面向对象编程原则?在Activity中创建变量而不是使用访问器方法会更好吗?Singleton是保持Android应用程序内存数据的最佳方式吗?

回答

0

是的,这是更好的方法。最好在Singleton对象中保存数据(正如你提到的那样),而不是每次都从共享首选项访问。我们在应用程序中为会话目的使用单身人士,这意味着只要应用程序正在运行变量数据将可以访问。您可以在活动级别创建变量,但这将是非常糟糕的方法。简而言之,你用于你目的的方法是最好的方法。

0

我会使用以下内容: 接口CurrentUser。 CurrentUser具有检索和更新用户的方法。用户可以存储在数据库,偏好或混合。 我会在需要时使用Dagger注入CurrentUser。 CurrentUser实现本身应该是一个单例,因为Dagger不保证singleton的特性。 如果您的CurrentUser具有RxJava流或LiveData等功能以保持观察者处于最新状态,则可获得奖励积分。

作为Singleton的替代品,您可能希望使用保留的碎片来实现Fragment Holder模式,但在您的情况下,Singleton似乎更好。只要确保你使用的接口和注入不会影响可测试性,并保持组件分离。

+0

从我的理解本质上来说,这些信息被保存在一个Singleton类中,但是这样的代码更清晰和更模块化? – D3bian0s

+0

是的,代码更好。通过客户端获得单例的实例是不好的做法,但只要客户端自己没有得到它,单纯的生命周期就没有问题。 单身可能很难测试它们是否有状态,所以考虑在每个测试中使用构造函数package-private并使用单例的新实例,并且您很好。 – charlag

相关问题