2012-05-28 16 views
0

我正在開發主屏幕小部件,並且我正在使用android sqlite數據庫。我用簡單的方法(添加,刪除,獲取記錄...)實現了一個簡單的類DBAdapter來處理數據庫工作。它有效,但現在我正在考慮如何做到這一點的最佳方式。如何以及在AppWidgetProvider中存儲持久對象(如db適配器)?

對我來說最大的問題是,如何(以及在​​哪裏)存儲我的DBAdapter的實例。如果我使用Activity,這將非常簡單 - 我將在onCreate方法中創建DBAdapter的實例,並且一切都很好。但現在我沒有這種選擇,因爲我使用AppWidgetProvider和幾個IntentServicesAppWidgetProvider(BroadcastReceiver)只能在特定的時間 - 在執行onReceive方法期間生效。 IntentService也會在完成必要的工作後「結束」。那麼如何以及在哪裏存儲我的DBAdapter的實例?我不想每次都創建新的DBAdapter實例。

我在想這個選項:make DBAdapter singleton clas或使用靜態類&方法,另一個選擇是使用Gson將DBAdapter存儲到sharedPreferences,或者使用序列化。但我寧願問。什麼是正確的方法來做到這一點? THX很多

回答

0

對我來說,最大的問題是,怎樣(在哪裏)來存儲我將對DBAdapter的實例。

專業提示:如果不從android.widget.Adapter繼承,請不要結束使用Adapter的課程。

我不想每次都創建DBAdapter的新實例。

歡迎您將其設爲單身/靜態數據成員。但是,一旦你的過程終止,它將消失,無論如何你需要重新創建一個新過程。因此,我建議您只需在您的IntentService中根據需要創建實例。 A DBAdapter「用簡單的方法(添加,刪除,獲取記錄...)」應該非常便於實例化。

另一種選擇是使用GSON來將對DBAdapter存儲sharedPreferences,或者可能使用序列

這是沒有意義的。 DBAdapter中的唯一數據值應該是SQLiteOpenHelper(或來自其他來源的SQLiteDatabase),它本身不能被保留。此外,這可能比創建DBAdapter的新實例慢1000倍。

+0

thx,我會按照你的意見;) – qkx

+0

但是,如何做到這一點,如果我需要從乘法服務寫入數據庫?例如dataservice會定期在後臺運行,並向db寫入新的數據,而在前臺,我正在根據用戶做一些寫作 - 如果這兩個寫作都在同一時間(有時會發生),我會得到異常'android.database。 sqlite.SQLiteException:錯誤代碼5:數據庫被鎖定。現在怎麼辦?更多細節在這裏:http://stackoverflow.com/questions/10798233/concurrent-writing-to-android-database-from-multiply-services – qkx

相關問題