我已经用Singleton模式实现了SQliteOpenHelper,并且到目前为止工作正常。但是请考虑以下顺序:
片段启动事务以更新记录触发了服务,该服务读取更新的数据事务由于某种原因失败并被回滚该服务将处理未提交的数据,这些数据稍后会回滚。因此,似乎单例模式与服务结合会导致数据隔离问题。但是我读了很多推荐单身人士的文章。使用单例时如何处理这种情况?
public class MyApplication extends Application{ private static MyApplication instance; public MyApplication(){ instance = this; } public static Context getContext(){ return instance; } } public class LocalDBHelper extends SQLiteOpenHelper{ private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "MyDB"; private static final String LOG_TAG = "LocalDBHelper"; private static LocalDBHelper instance = null; /*private constructor to avoid direct instantiation by other classes*/ private LocalDBHelper(){ super(MyApplication.getContext(), DATABASE_NAME, null, DATABASE_VERSION); } /*synchronized method to ensure only 1 instance of LocalDBHelper exists*/ public static synchronized LocalDBHelper getInstance(){ if(instance == null){ instance = new LocalDBHelper(); } return instance; } ... ... }
交易用途:
SQLiteDatabase db = LocalDBHelper.getInstance().getWritableDatabase(); db.beginTransaction(); try{ .... ... db.setTransactionSuccessful(); }catch(Exception e){ e.printStackTrace(); } finally{ db.endTransaction(); }