How to solve the issue of progress dialog lagging on Android platform?

In Android, the lagging issue with ProgressDialog may be caused by performing time-consuming operations on the main thread. To solve this problem, you can try the following methods:

  1. Use AsyncTask: Execute time-consuming operations in the doInBackground() method of AsyncTask, display a ProgressDialog in the onPreExecute() method, and finally close the ProgressDialog in the onPostExecute() method.
private class MyTask extends AsyncTask<Void, Void, Void> {
    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(MainActivity.this, "Loading", "Please wait...");
    }

    @Override
    protected Void doInBackground(Void... params) {
        // 执行耗时操作
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        progressDialog.dismiss();
        // 更新UI或者其他操作
    }
}

// 启动任务
new MyTask().execute();
  1. Use a Handler: Create a Handler in the main thread and send messages in the sub thread to update the state of the ProgressDialog.
private ProgressDialog progressDialog;
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        if (msg.what == 0) {
            progressDialog.dismiss();
            // 更新UI或者其他操作
        }
    }
};

private void showProgressDialog() {
    progressDialog = ProgressDialog.show(MainActivity.this, "Loading", "Please wait...");
    new Thread(new Runnable() {
        @Override
        public void run() {
            // 执行耗时操作
            // ...

            // 发送消息关闭ProgressDialog
            handler.sendEmptyMessage(0);
        }
    }).start();
}

// 启动任务
showProgressDialog();
  1. Utilize background threads: If the ProgressDialog is not necessary, you can consider placing the time-consuming operation in a background thread, and then updating the UI after the operation is completed.
private Thread backgroundThread = new Thread(new Runnable() {
    @Override
    public void run() {
        // 执行耗时操作
        // ...

        // 更新UI或者其他操作
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 更新UI
            }
        });
    }
});

// 启动后台线程
backgroundThread.start();

By using the above method, you can avoid performing time-consuming operations in the main thread, thus solving the issue of ProgressDialog freezing.

bannerAds