我想使用ORMLite,但我不喜歡我爲每個活動管理1個數據庫幫助程序。在整個應用程序生命週期中使用一個應該不會更好嗎?直到現在我已經使用greendao,它沒有這個問題。因爲沒有Application的onDestroy()方法,所以我無法找到任何合適的方法來在銷燬應用程序(我可以在Application的onCreate中輕鬆打開它)時正確釋放db helper。Android - 如何在整個應用程序生命週期中使用ORMLite dbhelper
有沒有人有辦法做到這一點?
我想使用ORMLite,但我不喜歡我爲每個活動管理1個數據庫幫助程序。在整個應用程序生命週期中使用一個應該不會更好嗎?直到現在我已經使用greendao,它沒有這個問題。因爲沒有Application的onDestroy()方法,所以我無法找到任何合適的方法來在銷燬應用程序(我可以在Application的onCreate中輕鬆打開它)時正確釋放db helper。Android - 如何在整個應用程序生命週期中使用ORMLite dbhelper
有沒有人有辦法做到這一點?
Ormlite
有OrmLiteBaseActivity它可以管理自己與活動週期的連接。你所有的活動都應該擴展這個類,你不需要關心何時破壞連接。您可以多次撥打幫手,連接發佈在每個活動的方法 onDestroy()
。
如果您的活動不是基於android的活動,例如SherlockActivity
或ActionBarActivity
,您可以考慮複製OrmLiteBaseActivity中的代碼並製作自己的基本活動,然後對其進行擴展。
這就是我在很多應用程序中所做的,我沒有看到任何問題。希望這可以幫助!
P/s:你甚至可以爲Android服務做同樣的事情OrmLiteBaseService
嗨,我照你說的做了,但在運行時我有這個異常:引起:java.lang.IllegalStateException:找不到OpenHelperClass,因爲沒有類類的通用參數com.thinple.smart.android.activity.Act_LoginRegister擴展OrmLiteSqliteOpenHelper。你應該使用getHelper(Context,Class)來代替。 這是因爲我已經有了一個擴展ActionBarActivity的超級活動。我從OrmLiteBaseActivity複製代碼到我的超級活動中,刪除泛型類型(我知道哪些是我的db助手類)。 –
如果我調用OpenHelperManager.getHelper(context,SmartBaseActivity.class)它不會編譯 –
我使用通過靜態同步getInstance()進行訪問的單例解決方案,如Gray Watson(ORMLite創始人)所述在Stack –
可以使用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...
}
}
是的,我確定我得到那個,這個問題的關鍵是,當銷燬應用程序時,你需要調用MySingletonHelper.instance.releaseHelper();並且因爲您沒有使用Actyvity的生命週期來管理助手生命週期,所以您不知道何時發佈它。對? – bakua
在應用程序的onResume/onPause中打開/關閉是否太昂貴? –