الوصول إلى قاعدة بيانات في مؤشر ترابط منفصل في Android
-
28-09-2019 - |
سؤال
كيف يمكنك الوصول إلى أ SQLiteDatabase
قاعدة البيانات في موضوع منفصل (أي: AsyncTask
) من Activity
وتأكد من أنك تترك الأمر دائمًا في حالة قانونية؟
إذا فهمت بشكل صحيح ، يمكن قتل الخيط في أي لحظة وقد تظل قاعدة البيانات مفتوحة ، مما قد يعطي IllegalStateException
(تم إنشاء SQLitedatabase ولم يغلق أبدًا) في الوقت الأخير.
كيف تتعامل مع هذا؟
المحلول
إذا كان لديك AsyncTask
تدار من قبل الخاص بك Activity
, ، ومن بعد Activity
قد يلغي AsyncTask
في الوقت المناسب (عندما يصبح عرضة للقتل من قبل OS ، على سبيل المثال Activity.onPause()
) لذا AsyncTask.onCancelled()
سيتم استدعاؤه حيث يمكنك إغلاق DB.
إذا كان لديك AsyncTask
(أو أ Thread
) لا تدار من قبل الخاص بك Activity
ثم لديك مشكلة ويجب أن تفكر في إعادة تصميم الهندسة المعمارية الخاصة بك.
نصائح أخرى
بطريقتين:
يمكنك تسجيل أ
Runtime.addShutdownHook(..)
وإغلاق قاعدة البيانات هناك.إنشاء مخصص
Application
وتنفيذonLowMemory()
حيث تغلق قاعدة البيانات.