2013-09-05 91 views
0

因此,在經歷了許多其他此類問題之後,我決定在我需要的所有活動中通過應用程序使用我的SqlLiteDataHandler的一個實例。如何在Android中處理數據庫鎖定錯誤?

我是怎麼做的,當啓動畫面加載,我創建了SqlLiteDataHandler的公共靜態實例。

我然後使用該處理器無處不在,但我從來沒有關閉或使其空,因爲我明白,一旦應用程序被關閉,應用程序將失去其參考。

但問題仍然存在。當我嘗試脫身並進入應用程序多次時,我仍然遇到數據庫鎖定問題。 (因此,多次經歷初始屏幕。)

我在哪裏出錯了?

我的實例創建是如此簡單:

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

我用DbStaticClass.sqlDataHandler整個應用程序。

回答

1

你不應該你LinkDataHandler從閃屏打造,在目前還沒有涉及您的閃屏或調用它多次,一些例子多個執行路徑:

  • 的Android殺死你的應用程序,而它在後臺由於內存不足,並重新創建僅可見Activity當用戶回來吧
  • 你有一個Service開始沒有進入開機畫面第一
  • 你的應用程序處理外部Intent
  • Services或其他的東西,可能會導致應用程序無法重新啓動,如果用戶再次進入通過閃屏應用程序,使其得到執行多次。

雖然最後一個可能不是你的應用程序的情況下,你不能逃避第一個;您創建了多個sqlDataHandlers,因此打開了到數據庫的多個連接,由於多種原因可能發生衝突。

要正確執行基於應用程序上下文的單例,請使用Application類及其onCreate,as explained in another answer


這個答案是基於假設:

  • DbStaticClass.sqlDataHandler僅獲取一個Activity的初始化onCreate法(SplashScreen
  • 您訪問DbStaticClass.sqlDataHandlerSplashScreen
  • LinkDataHandler創建您的數據庫處理程序的東西。