采用AsyncTask多线程方式编写程序一个模拟从网络下载文件的程序,点击“点击加载”按钮,在子线程中执行100次循环,每次循环休眠50毫秒,并通过进度条显示循环执行的进度。
时间: 2024-02-17 11:03:37 浏览: 61
好的,这是一个比较常见的异步任务场景,以下是一个简单的实现示例:
```java
public class DownloadTask extends AsyncTask<Void, Integer, Void> {
private ProgressBar mProgressBar;
public DownloadTask(ProgressBar progressBar) {
mProgressBar = progressBar;
}
@Override
protected Void doInBackground(Void... voids) {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i + 1);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mProgressBar.setProgress(values[0]);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Toast.makeText(mContext, "下载完成", Toast.LENGTH_SHORT).show();
}
}
```
在 `doInBackground` 方法中执行循环,并在每次循环后调用 `publishProgress` 方法更新进度条。在 `onProgressUpdate` 方法中更新进度条的进度值。在 `onPostExecute` 方法中弹出下载完成的提示。我们可以在点击“点击加载”按钮时,创建 `DownloadTask` 的实例并调用 `execute` 方法启动异步任务。
```java
Button btnLoad = findViewById(R.id.btn_load);
ProgressBar progressBar = findViewById(R.id.progress_bar);
btnLoad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DownloadTask downloadTask = new DownloadTask(progressBar);
downloadTask.execute();
}
});
```
以上就是一个简单的异步任务示例,实现了在子线程中执行循环并更新进度条的功能。
阅读全文