2014-07-18 31 views
4

我想使用ORMLite,但我不喜歡我爲每個活動管理1個數據庫幫助程序。在整個應用程序生命週期中使用一個應該不會更好嗎?直到現在我已經使用greendao,它沒有這個問題。因爲沒有Application的onDestroy()方法,所以我無法找到任何合適的方法來在銷燬應用程序(我可以在Application的onCreate中輕鬆打開它)時正確釋放db helper。Android - 如何在整個應用程序生命週期中使用ORMLite dbhelper

有沒有人有辦法做到這一點?

+0

在應用程序的onResume/onPause中打開/關閉是否太昂貴? –

回答

1

OrmliteOrmLiteBaseActivity它可以管理自己與活動週期的連接。你所有的活動都應該擴展這個類,你不需要關心何時破壞連接。您可以多次撥打幫手,連接發佈在每個活動的方法 onDestroy()

如果您的活動不是基於android的活動,例如SherlockActivityActionBarActivity,您可以考慮複製OrmLiteBaseActivity中的代碼並製作自己的基本活動,然後對其進行擴展。

這就是我在很多應用程序中所做的,我沒有看到任何問題。希望這可以幫助!
P/s:你甚至可以爲Android服務做同樣的事情OrmLiteBaseService

+0

嗨,我照你說的做了,但在運行時我有這個異常:引起:java.lang.IllegalStateException:找不到OpenHelperClass,因爲沒有類類的通用參數com.thinple.smart.android.activity.Act_LoginRegister擴展OrmLiteSqliteOpenHelper。你應該使用getHelper(Context,Class)來代替。 這是因爲我已經有了一個擴展ActionBarActivity的超級活動。我從OrmLiteBaseActivity複製代碼到我的超級活動中,刪除泛型類型(我知道哪些是我的db助手類)。 –

+0

如果我調用OpenHelperManager.getHelper(context,SmartBaseActivity.class)它不會編譯 –

+0

我使用通過靜態同步getInstance()進行訪問的單例解決方案,如Gray Watson(ORMLite創始人)所述在Stack –

0

可以使用Singleton模式:

package com.example.stackoverflowsandbox; 

public class MySingletonHelper extends OrmLiteSqliteOpenHelper { 
    private static MySingletonHelper instance; 

    public static MySingletonHelper getInstance() { 
     if (MySingletonHelper.instance == null) { 
      MySingletonHelper.instance = new MySingletonHelper(); 
     } 

     return MySingletonHelper.instance; 
    } 

    private MySingletonHelper() { 
     // code here... 
    } 

    @Override 
    public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { 
     // code here... 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) { 
     // code here... 
    } 
} 

查看更多在這裏:http://en.wikipedia.org/wiki/Singleton_pattern

+1

是的,我確定我得到那個,這個問題的關鍵是,當銷燬應用程序時,你需要調用MySingletonHelper.instance.releaseHelper();並且因爲您沒有使用Actyvity的生命週期來管理助手生命週期,所以您不知道何時發佈它。對? – bakua

相關問題