【问题标题】:How to handle database locking error in Android?如何处理Android中的数据库锁定错误?
【发布时间】:2013-09-05 15:04:22
【问题描述】:

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

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

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

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

我哪里错了?

我的实例创建就这么简单:

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

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

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

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

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

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

    要根据应用程序上下文正确实现单例,请使用Application 类及其onCreateas explained in another answer


    此答案基于假设:

    • DbStaticClass.sqlDataHandler 仅在 ActivityonCreate 方法中初始化 (SplashScreen)
    • 您在SplashScreen 之外访问DbStaticClass.sqlDataHandler
    • LinkDataHandler 创建您的数据库处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多