您如何访问 SQLiteDatabase 数据库在单独的线程中(即:一个 AsyncTask)的一个 Activity 并确保始终将其保持在合法状态?

如果我理解正确,线程可以随时被终止,并且数据库可能保持打开状态,可能会给出一个 IllegalStateException (sqlitedatabase创建且从未关闭)在稍后的时间。

你如何处理这个问题?

有帮助吗?

解决方案

如果您AsyncTask由您Activity管理,然后Activity可以在适当的时候取消AsyncTask(当它成为容易受到OS,例如Activity.onPause()之后被杀死),所以AsyncTask.onCancelled()将被调用,您可以关闭数据库。

如果您的AsyncTask(或Thread)将不包含在Activity管理那么你有麻烦,并应考虑重新设计的体系结构。

其他提示

两种方式:

  1. 您可以注册一个 Runtime.addShutdownHook(..) 并在那里关闭数据库。

  2. 创建自定义 Application 并实施 onLowMemory() 关闭数据库的地方。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top