سؤال

كيف يمكنك الوصول إلى أ SQLiteDatabase قاعدة البيانات في موضوع منفصل (أي: AsyncTask) من Activity وتأكد من أنك تترك الأمر دائمًا في حالة قانونية؟

إذا فهمت بشكل صحيح ، يمكن قتل الخيط في أي لحظة وقد تظل قاعدة البيانات مفتوحة ، مما قد يعطي IllegalStateException (تم إنشاء SQLitedatabase ولم يغلق أبدًا) في الوقت الأخير.

كيف تتعامل مع هذا؟

هل كانت مفيدة؟

المحلول

إذا كان لديك AsyncTask تدار من قبل الخاص بك Activity, ، ومن بعد Activity قد يلغي AsyncTask في الوقت المناسب (عندما يصبح عرضة للقتل من قبل OS ، على سبيل المثال Activity.onPause()) لذا AsyncTask.onCancelled() سيتم استدعاؤه حيث يمكنك إغلاق DB.

إذا كان لديك AsyncTask (أو أ Thread) لا تدار من قبل الخاص بك Activity ثم لديك مشكلة ويجب أن تفكر في إعادة تصميم الهندسة المعمارية الخاصة بك.

نصائح أخرى

بطريقتين:

  1. يمكنك تسجيل أ Runtime.addShutdownHook(..) وإغلاق قاعدة البيانات هناك.

  2. إنشاء مخصص Application وتنفيذ onLowMemory() حيث تغلق قاعدة البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top