在显示AlertDialoge时执行操作,然后关闭

时间:2018-11-10 01:26:34

标签: java android

我想启动一个AlertDialogue,显示一个加载消息和一个ProgressBar图标,然后在显示对话时,我将运行繁重的处理,同时ProgressBar旋转,最后在处理结束时取消对话。

我尝试将逻辑放在未执行的警报对话框的setOnShowListener上。然后,我尝试开始对话,然后使用如下所示的延迟处理程序:

  new Handler().postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
    // heavy procssing logic
    // alert.dismiss();
        }
    }, 1000);

尽管,ProgressBar图标停止旋转,所以我认为我的繁重工作阻塞了UI。我如何实现我所需要的。谢谢。

编辑:我已经用新的Thread()替换了处理程序,并且一切正常。这种方法会引起诸如内存泄漏的任何问题吗?

1 个答案:

答案 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)