因此,在经历了许多其他类似的问题后,我决定在我需要的所有活动中使用我的SqlLiteDataHandler的一个实例。
我是如何操作的,当Splash屏幕加载时,我创建了一个SqlLiteDataHandler的公共静态实例。
然后我随处使用该处理程序,虽然我从未关闭它或将其设为null,因为我知道应用程序关闭后应用程序将丢失其引用。
但问题仍然存在。当我试图离开并多次进入应用程序时,我仍然遇到数据库锁定问题。 (因此,多次通过启动画面。)
我哪里错了?
我的实例创建就像这样简单:
DbStaticClass.sqlDataHandler = new LinkDataHandler(SplashScreen.this);
我在整个应用程序中使用DbStaticClass.sqlDataHandler。
答案 0 :(得分:1)
您不应该在启动画面中创建LinkDataHandler
,因为有多个执行路径不涉及启动画面或多次调用它,例如:
Activity
Service
而未先进入初始屏幕Intent
Services
或其他内容可能会导致您的应用程序无法重新启动,如果用户再次通过启动画面进入您的应用程序,导致它多次执行。虽然最后一个可能不是你的应用程序中的情况,但你不能逃避第一个;您创建了多个sqlDataHandlers
因此打开了与数据库的多个连接,这可能由于多种原因而发生冲突。
要根据应用程序上下文正确实现单例,请使用Application
类及其onCreate
,as explained in another answer。
本答案基于以下假设:
DbStaticClass.sqlDataHandler
仅在Activity
的{{1}}方法(onCreate
)中初始化SplashScreen
之外访问DbStaticClass.sqlDataHandler
。SplashScreen
创建数据库处理程序。