0

因此,在解决了许多其他此类问题之后,我决定在整个应用程序中使用我的 SqlLiteDataHandler 的一个实例,用于我需要的所有活动。

我是怎么做的,当启动画面加载时,我创建了一个 SqlLiteDataHandler 的公共静态实例。

然后,我在任何地方都使用该处理程序,尽管我从不关闭它或将其设为 null,因为我知道一旦应用程序关闭,该应用程序将失去其引用。

但问题仍然存在。当我尝试多次退出并进入应用程序时,我仍然遇到数据库锁定问题。(因此,多次浏览初始屏幕。)

我哪里错了?

我的实例创建就像这样简单:

DbStaticClass.sqlDataHandler = new LinkDataHandler(SplashScreen.this);

我在整个应用程序中使用 DbStaticClass.sqlDataHandler。

4

1 回答 1

1

您不应该LinkDataHandler从启动屏幕创建您的,因为有多个执行路径不涉及您的启动屏幕或多次调用它,一些示例:

  • 由于内存不足,Android 在后台杀死您的应用程序,并仅Activity在用户返回时重新创建可见的应用程序
  • Service无需先进入启动画面即可启动
  • 您的应用程序处理外部Intent
  • Services如果用户再次通过启动屏幕进入您的应用程序,或其他东西可能会导致您的应用程序无法重新启动,从而导致它多次执行。

虽然你的应用程序中可能不是最后一个,但你不能逃避第一个;您sqlDataHandlers创建了多个,因此打开了与数据库的多个连接,这可能由于多种原因而发生冲突。

要根据应用程序上下文正确实现单例,请使用Application类及其onCreate如另一个答案中所述


该答案基于以下假设:

  • DbStaticClass.sqlDataHandler仅在Activity'sonCreate方法 ( SplashScreen)中初始化
  • DbStaticClass.sqlDataHandlerSplashScreen.
  • LinkDataHandler创建您的数据库处理程序的东西。
于 2013-09-05T16:55:01.560 回答