在显示ProgressDialog时暂停Android应用程序的主线程

时间:2014-08-04 09:37:01

标签: java android multithreading android-asynctask

当我的Android应用程序启动时,需要在第一次加载的活动中的onCreate期间从数据库加载大量数据。我想为此展示一个ProgressDialog。但是ProgressDialog无法在主线程中显示,因此必须使用AsyncTask或新线程。但这也意味着,随着主要线程的继续,活动将继续初始化。

基本上,我需要在主线程(而不是AsyncTask)中处理时显示ProgressDialog或其等价物。

有办法吗?

4 个答案:

答案 0 :(得分:1)

Main/UI线程负责绘制UI,因此负责ProgressDialog本身。因此,您无法阻止它,并希望他将绘制UI。您应该在AsyncTask的{​​{1}}内移动初始化内容,然后在调用 doInBackgroud后继续使用其他后缀

答案 1 :(得分:1)

您将永远无法显示进度,因为您的活动视图尚未创建,因为您在读取数据库onCreate方法finshes后读取onCreate方法中的数据库,现在您的视图会膨胀等等。 。

答案 2 :(得分:1)

您应该使用Thread(ASyncTask)加载数据,您应该使用“onPreExecute()”显示您的ProgressDialog,并使用“onProgressUpdate()”更新它,并使用“onPostExecute()”完成对话,所有这些都在运行UI线程已经。

答案 3 :(得分:1)

  然而,

ProgressDialog无法在主线程中显示,因此必须使用AsyncTask或新线程。

你是如何得出这个结论的?所有UI内容都显示在UI线程中,因此也显示在ProgressDialog中。需要在UI线程内创建和调用它才能工作,否则你的应用程序崩溃。

首先你需要检查onCreate(),如果你的东西已经加载,如果没有,显示ProgressDialog,在后台加载东西,然后在UI线程中发帖以关闭ProgressDialog并显示结果。 / p>

它通常如何运作。