【发布时间】:2012-11-25 19:48:03
【问题描述】:
当我的测验应用程序第一次启动时,它需要将问题添加到数据库和其他一些东西,这需要几秒钟。我想在发生这种情况时显示一个不确定的进度条。添加问题后,该类调用 finish() 并转到主屏幕。问题是除非未调用完成,否则不会绘制布局。我假设在调用 oncreate 和 onstart 之前它不会绘制 XML 布局。那么我该如何解决呢?
【问题讨论】:
当我的测验应用程序第一次启动时,它需要将问题添加到数据库和其他一些东西,这需要几秒钟。我想在发生这种情况时显示一个不确定的进度条。添加问题后,该类调用 finish() 并转到主屏幕。问题是除非未调用完成,否则不会绘制布局。我假设在调用 oncreate 和 onstart 之前它不会绘制 XML 布局。那么我该如何解决呢?
【问题讨论】:
在您填充数据库时未显示 UI 的原因可能是您在 UI-Thread(应用程序的主线程)中执行此操作。由于线程忙于填充您的数据库,因此没有时间显示 UI、动画进度指示器或对用户操作做出反应。
因此,您应该始终在单独的线程中运行耗时的任务。请参阅 android 开发者博客中关于 无痛线程 的优秀条目,了解更多信息并正确操作:
【讨论】:
使用AsyncTask,在onPreExecute 中显示进度对话框并在onPostExecute 中关闭,在doInBackground 中准备您的数据库。
除非您使用 DialogFragment 来显示对话框,否则您必须处理设备旋转。
【讨论】: