2012-11-17 85 views
2

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

任何意见

+0

“操作应该很快” - 特别是在Android 1.x/2.x上,您无法控制它们是否“快速”,因为这是由另一个运行确定的应用程序与您的应用程序一样多。 – CommonsWare

回答

2

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

  1. 完全无响应的用户界面是一个很大的nono。如果您需要锁定用户以免与程序互动,则需要向他保证实际上正在发生某些事情 - 其他任何事情都可能会被解释为您的应用程序有问题。根据需要,在应用程序运行时使用对话框,Toasts和/或进度条。
  2. Android将为用户提供强制关闭其认为挂起的应用程序的选项。您不希望在您的应用程序发生正常行为的过程中发生这种情况。
0

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

相关问题