在Android中的单独线程中访问数据库

时间:2010-11-24 17:17:55

标签: android multithreading sqlite android-activity android-asynctask

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

如果我理解正确,线程可以随时被杀死,数据库可能会保持打开状态,可能会产生IllegalStateException SQLiteDatabase 在后期创建并永不关闭

你是如何处理的?

2 个答案:

答案 0 :(得分:0)

两种方式:

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

  2. 创建自定义Application并在关闭数据库的位置实施onLowMemory()

答案 1 :(得分:0)

如果您的AsyncTaskActivity管理,那么Activity可能会在适当的时间取消AsyncTask(当它变得容易被操作系统杀死时,例如{ {1}})因此,您可以在关闭数据库的地方调用Activity.onPause()

如果您的AsyncTask.onCancelled()(或AsyncTask)未由Thread管理,则您遇到麻烦,应考虑重新设计您的架构。