دیتابیس سینگل تون - 1
و تو چه میدانی دیتابیس چیست :)) یک هفته ست درگیرم که سنگل تونش کنم!
کلاسی که از SQLiteOpenHelper اکستند میشه، مسئول ساخت دیتابیس هست.
یه کلاس سینگل تون مینویسیم و از کلاس بالا نیو میکنیم و بهش کانتکس اپلیکیشن میدیم. متدهای این کلاس همگی synchronized هستند تا thread safe باشن.
معمولا عملیات دیتابیسی توی تردهای دیگه انجام میشن. (مثلا توسط کلاس asyncTask یا ترد معمولی)
من میخوام توی کل برنامه فقط "یک شی دیتابیس" و "یک کانکشن به دیتابیس" وجود داشته باشه
(کانکشن به دیتابیس همون getWritableDatabase() هست)
ممکنه توی یک ترد دیتابیس بسته بشه در حالی که توی ترد دیگه داره توی دیتابیس مینویسه. در این صورت ارور میده. راه حل:
یه کانتر تعریف کرده و در صورتی دیتابیس رو میبنده که جای دیگه ای کانکشن به دیتابیس نزده شده باشه.
خیلی مهمه که دیتابیس بسته بشه. وگرنه ارور لیک مموری میده. البته یکی توی استک اور فلو گفته اگر کلاس هلپر سینگل تون باشه این مشکل پیش نمیاد! ولی بنظرم ببندیم بهتره.
این پست توضیحات همین روش است که بسیار مفیده و لطفا چند بار خوانده شود.