android 采用AsyncTask多线程方式编写程序一个模拟从网络下载文件的程序,点击“点击加载”按钮,在子线程中执行100次循环,每次循环休眠50毫秒,并通过进度条显示循环执行的进度。
时间: 2024-02-17 10:04:27 浏览: 68
Android使用AsyncTask实现多线程下载的方法
好的,我可以帮你解答这个问题。以下是使用AsyncTask多线程方式编写一个模拟从网络下载文件的程序的示例代码:
```java
public class DownloadTask extends AsyncTask<Void, Integer, Void> {
private ProgressDialog mProgressDialog;
private Context mContext;
public DownloadTask(Context context) {
mContext = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(mContext);
mProgressDialog.setMessage("正在下载文件...");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
for (int i = 1; i <= 100; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mProgressDialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mProgressDialog.dismiss();
Toast.makeText(mContext, "下载完成!", Toast.LENGTH_SHORT).show();
}
}
```
在Activity中调用这个AsyncTask:
```java
public class MainActivity extends AppCompatActivity {
private Button mDownloadButton;
private DownloadTask mDownloadTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDownloadButton = findViewById(R.id.download_button);
mDownloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDownloadTask = new DownloadTask(MainActivity.this);
mDownloadTask.execute();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mDownloadTask != null) {
mDownloadTask.cancel(true);
}
}
}
```
在上面的代码中,我们定义了一个名为DownloadTask的AsyncTask类,它的参数是Void,进度值是Integer,结果值是Void。我们在doInBackground()方法中执行100次循环,每次循环休眠50毫秒,并通过publishProgress()方法来更新进度条的进度值。在onPreExecute()方法中,我们创建并显示一个ProgressDialog来显示下载进度。在onPostExecute()方法中,我们关闭ProgressDialog并显示一个Toast提示用户下载完成。
在Activity中,我们在点击“点击加载”按钮时创建并执行DownloadTask。在Activity销毁时,我们检查DownloadTask是否正在运行,如果是则取消它,以避免内存泄漏。
阅读全文