如何在 Android 中进行大量计算时显示加载屏幕?

How to display a loading screen while doing heavy computing in Android?

我正在开发一个程序,可以在用户 phone 中搜索某个日期,这大约需要 2-3 秒。在进行计算时,我想显示一个加载屏幕,以便用户知道确实正在发生某些事情。但是,当我尝试在计算之前显示加载屏幕时,屏幕上没有显示任何内容。

这是我的:

        ProgressDialog loading= new ProgressDialog(this);
        loading.setTitle("Loading");
        loading.setMessage("Please wait...");
        loading.show();

       //search stuff
        loading.dismiss();

除此之外,我还尝试将 ProgressDialog 放入如下线程中,

new Thread(new Runnable(){
            public void run(){
              ProgressDialog loading= new ProgressDialog(this);//error here for "this"
              loading.setTitle("Loading");
              loading.setMessage("Please wait...");
              loading.show();
            }
        });
//search stuff

但由于 "this" 关键字而失败,我相信是因为它指的是 Activity 而不是常规的 class,但我可能是错的...

如何让 ProgressDialog 正确显示?

尝试使用进度条传递新 class 的上下文(这会在您的主 activity 上进行)

NAME_OF_YOUR_CLASS context = new NAME_OF_YOUR_CLASS(getApplicationContext());

然后在您的 class 上调用这样的方法..(继续 class)

 public Networking(Context c) {
        this.context= c;
    }

不要忘记将上下文设为字段(private final Context 上下文;)

希望这对您有所帮助

我也不知道这是否可行,但请尝试扩展 AsyncTask 并使用方法 运行 您的进度条。

尝试这样处理

mProgressDialog = ProgressDialog.show(this, "Please wait","Long operation starts...", true);
        new Thread() {
            @Override
            public void run() {

               //Do long operation stuff here search stuff

                try {

                    // code runs in a thread
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mProgressDialog.dismiss();
                        }
                    });
                } catch (final Exception ex) {

                }
            }
        }.start();

繁重的任务使用异步任务。将进度对话框代码放在 onPreExecute 方法中,进度对话框关闭代码放在 onPostExecute 方法中,所有繁重的任务放在 doInBackground 方法中。