如何在Android中进行繁重的计算时显示加载屏幕?

时间:2015-11-02 03:56:54

标签: android multithreading progressdialog android-progressbar

我正在开发一个程序,用于搜索用户手机的某个日期,大约需要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而不是一个普通的类,但我可能错了......

如何正确显示ProgressDialog?

3 个答案:

答案 0 :(得分:1)

尝试以这种方式处理它

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();

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

尝试使用进度条传递新课程的上下文(这取决于您的主要活动)

NAME_OF_YOUR_CLASS context = new NAME_OF_YOUR_CLASS(getApplicationContext());

并在你的类上调用这样的方法..(这在课堂上)

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

不要忘记将上下文设为字段(私有最终上下文上下文;)

希望这会有所帮助

也是idk,如果这样可行,但尝试扩展AsyncTask并使用方法在那里运行进度条。