如何在Android中处理数据库锁定错误?

时间:2013-09-05 15:04:22

标签: android sqlite

因此,在经历了许多其他类似的问题后,我决定在我需要的所有活动中使用我的SqlLiteDataHandler的一个实例。

我是如何操作的,当Splash屏幕加载时,我创建了一个SqlLiteDataHandler的公共静态实例。

然后我随处使用该处理程序,虽然我从未关闭它或将其设为null,因为我知道应用程序关闭后应用程序将丢失其引用。

但问题仍然存在。当我试图离开并多次进入应用程序时,我仍然遇到数据库锁定问题。 (因此,多次通过启动画面。)

我哪里错了?

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

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

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

1 个答案:

答案 0 :(得分:1)

您不应该在启动画面中创建LinkDataHandler,因为有多个执行路径不涉及启动画面或多次调用它,例如:

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

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

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


本答案基于以下假设:

  • DbStaticClass.sqlDataHandler仅在Activity的{​​{1}}方法(onCreate)中初始化
  • 您可以在SplashScreen之外访问DbStaticClass.sqlDataHandler
  • SplashScreen创建数据库处理程序。