ProgressDialog没有显示即使我使用一个线程,因为我有这个(内onCreate()方法)的任务
:ProgressDialog没有显示即使我使用一个线程,因为我有这个(内onCreate()方法)的任务
private ProgressDialog pDialog; //(this is in the header)
.
.
.
//This is onCreate() method
pDialog=new ProgressDialog(MenuActivity.this);
pDialog.setMessage(getString(R.string.downloading));
pDialog.setCancelable(false);
...some lines of code...
pDialog.show();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
resultados=timeConsumingTask();
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(resultados.contains(1)){
if(pDialog!=null){
if(pDialog.isShowing()){
pDialog.dismiss();
}
}
doSomething();
}else{
if(pDialog!=null){
if(pDialog.isShowing()){
pDialog.dismiss();
}
}
doOtherThing();
{
我已经看过所有的教程,并在每所以在这里回答。他们每个人都说你必须做pDialog.show();就在耗时任务之前,但显然我缺少一些东西,因为pDialog从不显示。
你能帮我展示一下,并在if里面解雇它吗?
谢谢。
编辑:
也许相关的是,我打电话的FloatingActionButton的onclick()方法)
的show()方法,一切如果UI被阻止在某一点上对话框不会被显示。
行thread.join();
阻止您的UI线程。
尝试使用AsyncTask代替线程,并将线程终止后执行的代码放在AsyncTask.onPostExecute()上。
删除join();并将if移动到另一个方法,从thread()内部调用,这个技巧。另外,我不得不关闭runOnUiThreadMethod中的pDialog()。你的回答让我走上正轨。谢谢! – Fustigador
要渲染任何UI部件活动,必须完成/完成OnCreate()函数调用。
由于您试图显示和隐藏来自同一功能的进度对话框,因此它不会在屏幕上显示效果。
而且这样做的Thread.join()你是阻止其阻止在OnCreate()完成,并导致显示和隐藏中的onCreate()
解决方案进度对话框的主要威胁:尝试执行您的timeConsumingTask()在没有thread.join()的线程上使用runOnUiThread()方法来隐藏线程本身的progressDialog
请问您可以在这里发布pDialog对象初始化代码吗? –
当然,我要编辑我的问题。 – Fustigador
Diloag是一个UI组件应该与主UI线程一起使用而不是后台线程 – Stallion