如何在SQLiteDatabase
的单独线程(即:AsyncTask
)中访问Activity
数据库,并确保始终将其置于合法状态?
如果我理解正确,线程可以随时被杀死,数据库可能会保持打开状态,可能会产生IllegalStateException
( SQLiteDatabase
在后期创建并永不关闭。
你是如何处理的?
答案 0 :(得分:0)
两种方式:
您可以在那里注册Runtime.addShutdownHook(..)
并关闭数据库。
创建自定义Application
并在关闭数据库的位置实施onLowMemory()
。
答案 1 :(得分:0)
如果您的AsyncTask
由Activity
管理,那么Activity
可能会在适当的时间取消AsyncTask
(当它变得容易被操作系统杀死时,例如{ {1}})因此,您可以在关闭数据库的地方调用Activity.onPause()
。
如果您的AsyncTask.onCancelled()
(或AsyncTask
)未由Thread
管理,则您遇到麻烦,应考虑重新设计您的架构。