如何增加进度条(进度对话框)并同时在后台运行任务?

时间:2018-07-27 04:33:21

标签: android progress-bar progressdialog

我的应用程序执行繁重的任务,因此我想向用户显示进度栏并在后台运行任务,以便用户可以了解其加载情况。 当后台任务完成时,隐藏进度栏。 但是进度条不应花费相同的时间达到最大值,而应取决于用户的输入或处理。

2 个答案:

答案 0 :(得分:1)

使用AsyncTaskAsyncTask是在Android中实现并行性的最简单方法之一,而无需处理诸如Threads之类的更复杂的方法。尽管它提供了与UI线程基本的并行度,但不应将其用于更长的操作(例如,不超过2秒)。

AsyncTask有四种方法可以完成任务:

  1. onPreExecute()
  2. doInBackground()
  3. onProgressUpdate()
  4. onPostExecute()

检查link了解更多详细信息。

答案 1 :(得分:0)

您可以创建类似的内容,该过程将在30秒内结束。希望对您有用

private ProgressDialog progressDialog;

public void init() {
    progressDialog = new ProgressDialog(context);
    progressDialog.setCancelable(false);
    progressDialog.setMessage("please wait");
    progressDialog.show();
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (time < 30) {
                try {
                    Thread.sleep(1000);
                    Message message = new Message();
                    message.what = UPDATE_PROGRESS;
                    handler.sendMessage(message);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            Message message = new Message();
            message.what = END_PROGRESS;
            handler.sendMessage(message);
        }
    }).start();
}

private static final int UPDATE_PROGRESS = 1;
private static final int END_PROGRESS = 2;
private int time;

private Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case UPDATE_PROGRESS:
                progressDialog.setMessage("Time: " + time++);
                break;

            case END_PROGRESS:
                progressDialog.dismiss();
                break;

            default:
                break;
        }
        return true;
    }
});

更新 这是线程和处理程序的示例。但是您也可以创建一个asynctask