我想启动一个AlertDialogue,显示一个加载消息和一个ProgressBar图标,然后在显示对话时,我将运行繁重的处理,同时ProgressBar旋转,最后在处理结束时取消对话。
我尝试将逻辑放在未执行的警报对话框的setOnShowListener上。然后,我尝试开始对话,然后使用如下所示的延迟处理程序:
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
// heavy procssing logic
// alert.dismiss();
}
}, 1000);
尽管,ProgressBar图标停止旋转,所以我认为我的繁重工作阻塞了UI。我如何实现我所需要的。谢谢。
编辑:我已经用新的Thread()替换了处理程序,并且一切正常。这种方法会引起诸如内存泄漏的任何问题吗?
答案 0 :(得分:0)
创建一个新的AsyncTask来完成您的工作,这将导致“ doInBackground()”方法中放置的所有代码在后台线程中运行,您具有在主线程上运行前和后执行的代码,我的建议是在执行前的方法中创建一个AlertDialog,并在执行后关闭它,使用doInBackground方法中的“ publishProgress()”方法根据需要更新对话框。
否则,您可以使用progressBar,而不是alertDialog(或其他方法),只需在视图中将其简单地珍贵,然后像往常一样实例化它即可。
<ProgressBar
android:id=“+id/progressBar”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:centreInParent=true
android:indeterminate=true
android:visibility=gone />
ProgressBar progressBar = view.findViewById(R.id.progressBar)
现在,当您想显示进度条时,请使用
progressBar.setVisibility(visible)
或者隐藏
progressBar.setVisibility(gone)