Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可以在UI线程上执行DB操作吗?_Android_Sqlite - Fatal编程技术网

Android 可以在UI线程上执行DB操作吗?

Android 可以在UI线程上执行DB操作吗?,android,sqlite,Android,Sqlite,我正在使用数据库来持久化搜索表单的状态。我使用onPause方法保存数据,使用onResume方法恢复数据。我的观点是,恢复和持久化状态应该是一个阻塞操作,所以我计划在UI线程上执行数据库操作。我知道这通常是不鼓励的,但是操作应该是快速的,我认为如果它们是异步完成的,可能会导致不一致的UI行为 任何建议即使您希望它是一个阻塞操作,也必须向用户显示正在发生某些事情。因为当UI线程被阻塞时,屏幕将不会响应用户的任何触摸操作。Sp,您可以在onPause()和onResume()方法中有一个无限进度条

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


任何建议

即使您希望它是一个阻塞操作,也必须向用户显示正在发生某些事情。因为当UI线程被阻塞时,屏幕将不会响应用户的任何触摸操作。Sp,您可以在
onPause()
onResume()
方法中有一个无限进度条,直到持久化和恢复完成<显然,您必须在单独的线程中执行此操作。因为如果UI线程有一段时间没有响应,android可能会给
应用程序发出“不工作”错误。

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

  • 完全无响应的UI是一个大问题。如果您需要将用户从与程序的交互中锁定出来,那么您需要向他保证实际发生了一些事情——其他任何事情都可能被解释为您的应用程序有缺陷。在应用程序运行时使用对话框、祝酒词和/或进度条(视情况而定)
  • Android将为用户提供强制关闭其认为挂起的应用程序的选项。您不希望在应用程序的正常行为发生期间发生这种情况
    “操作应该很快”——特别是在Android 1.x/2.x上,你无法控制它们是否“快”,因为这取决于其他正在运行的应用程序,也取决于你的应用程序。