我已经开始学习和使用绿道ORM,我有这个问题。 我正在编写一个备忘录/警报应用程序,这意味着我需要从各种活动以及服务和接收器访问数据库。 例如:在一个屏幕上,我正在设置警报的值。 在服务和接收器上,我正在读取这些值并采取相应的行动。
从我的主要活动 oncreate() 内部,对象和关系的设置和数据库访问似乎工作正常,因为我刚刚在那里设置了编码器来测试和调试。
我想编写一个处理所有数据库访问和操作的单例类,但由于它不是一个活动,所以它没有"上下文" 我知道将上下文作为参数传递是一个坏主意。 我需要找到一种方法来从上述所有内容访问数据库。
另外,我在某处读到我不应该在主活动中初始化数据库。 有人可以详细说明并解释初始化的想法和主要活动的问题吗?
希望我能够清除我的问题。 感谢您的阅读和可能的回答。
泄漏上下文意味着您保留了对超出其正常生命周期的Context
的引用 - 通常是已完成的Activity
或已停止的Service
。将Context
作为方法参数传递并不意味着存在泄漏。仅当您在字段中保存对该Context
的引用并将其保持在系统想要销毁它的点之外(因此您的引用可以防止它被垃圾回收)时,它才是一个泄漏。如果您保留对其他事物的引用,该引用保留对Context
的引用,则也会发生同样的情况,其主要示例是View
。
有一个应用程序Context
的生存时间与您的应用程序流程一样长,并且始终是单例。持有对它的引用不是泄漏。这意味着您可以在单一实例数据库帮助程序类中使用它,而不必担心它会泄漏。您的单一实例实际上可以接受任何Context
因为您只需在其上调用.getApplicationContext()
即可获取此应用程序上下文实例。
子类化Application
是可选的。在我看来,这样做的好处是使用应用程序的onCreate()
方法来执行任何一次性设置,因为这是您运行应用程序代码的第一次机会。
这里有一篇关于Context
的好文章,可能会有用:https://possiblemobile.com/2013/06/context/