在 Android 中的单独线程中访问数据库
-
28-09-2019 - |
题
您如何访问 SQLiteDatabase
数据库在单独的线程中(即:一个 AsyncTask
)的一个 Activity
并确保始终将其保持在合法状态?
如果我理解正确,线程可以随时被终止,并且数据库可能保持打开状态,可能会给出一个 IllegalStateException
(sqlitedatabase创建且从未关闭)在稍后的时间。
你如何处理这个问题?
解决方案
如果您AsyncTask
由您Activity
管理,然后Activity
可以在适当的时候取消AsyncTask
(当它成为容易受到OS,例如Activity.onPause()
之后被杀死),所以AsyncTask.onCancelled()
将被调用,您可以关闭数据库。
如果您的AsyncTask
(或Thread
)将不包含在Activity
管理那么你有麻烦,并应考虑重新设计的体系结构。
其他提示
两种方式:
您可以注册一个
Runtime.addShutdownHook(..)
并在那里关闭数据库。创建自定义
Application
并实施onLowMemory()
关闭数据库的地方。
不隶属于 StackOverflow