可以在UI线程上执行数据库操作吗?

时间:2012-11-17 15:57:02

标签: android sqlite

我正在使用数据库来保存搜索表单的状态。我使用onPause方法来持久化数据和onResume方法来恢复它。我的观点是恢复和持久状态应该是一个阻塞操作,所以我计划在UI线程上执行数据库操作。我知道这通常是不鼓励的,但操作应该很快,我认为如果它们是异步完成的,它们可能导致不一致的UI行为。

任何建议

2 个答案:

答案 0 :(得分:2)

即使您希望应用程序在执行慢速操作时不接受用户输入,您仍然不希望在UI线程中执行这些操作。这有两个原因:

  1. 完全无响应的用户界面是一个很大的诺言。如果你需要锁定你的用户远离与程序的交互,你需要向他保证实际上正在发生的事情 - 其他任何东西都可能被解释为你的应用程序有问题。根据需要,在应用程序运行时使用对话框,Toast和/或progressbars。
  2. Android将为用户提供强制关闭它认为挂起的应用程序的选项。您不希望在应用程序的正常行为发生期间发生这种情况。

答案 1 :(得分:0)

即使您希望它成为阻止操作,您也必须向用户显示某些事情正在发生。因为当UI线程被阻止时,屏幕将不响应用户的任何触摸操作。 Sp,您可以在onPause()onResume()方法中使用无限期进度条,直到完成持久性和恢复。
显然你必须在一个单独的线程中这样做。因为如果UI线程有时没有响应,android会给出Application Not Working错误。