Java 什么是AsyncTask(或AsyncResult),它通常如何用于Android?
找不到关于这个概念的太多信息。已经提到 Edit:我认为我所指的AsyncResult是用于保存泛型结果的特定名称。(后台操作,完成后将异步通知用户。) 上面的链接似乎只是这个概念的具体实现。Java 什么是AsyncTask(或AsyncResult),它通常如何用于Android?,java,android,Java,Android,找不到关于这个概念的太多信息。已经提到 Edit:我认为我所指的AsyncResult是用于保存泛型结果的特定名称。(后台操作,完成后将异步通知用户。) 上面的链接似乎只是这个概念的具体实现。 有关参考,请参见以下内容: 背景/理论 AsyncTask允许您在后台线程上运行任务,同时将结果发布到UI线程 用户应始终能够与应用程序交互,因此它非常重要 避免使用以下任务阻塞主(UI)线程 从网上下载内容 这就是我们使用异步任务的原因 它通过包装UI线程消息队列和处理程序提供了一个简单的界面
有关参考,请参见以下内容:
参数
-执行时发送到任务的参数类型
进度
-后台计算期间发布的进度单位类型
结果
-背景计算结果的类型
异步任务并不总是使用所有类型。要将类型标记为未使用,只需使用类型Void:
私有类MyTask扩展了AsyncTask{…}
这三个参数对应于三个主要功能,您可以在异步任务中覆盖:
doInBackground(参数…)
onProgressUpdate(进度…)
onPostExecute(结果)
执行异步任务
调用execute()
,并将参数发送到后台任务
发生了什么
在主/UI线程上,调用onPreExecute()
。(初始化此线程中的某些内容,例如在用户界面上显示进度条。)
- 长时间运行的任务应该发生在哪里
- 必须至少重写
才能使用AsyncTaskdoInBackground()
- 调用
在后台计算仍在执行时更新用户界面中的进度显示。(例如,制作进度条动画或在文本字段中显示日志。)publishProgress(Progress…
- 这将导致调用onProgressUpdate()
doInBackground()
返回一个结果。这将触发下一步- 示例A下载图像并将其显示在ImageView中
- 而示例B下载了一些文件
doInBackground()
方法下载图像并将其存储在位图类型的对象中。onPostExecute()
方法获取位图并将其放置在ImageView中
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bitImage;
public DownloadImageTask(ImageView bitImage) {
this.bitImage = bitImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mBmp = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mBmp = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mBmp;
}
protected void onPostExecute(Bitmap result) {
bitImage.setImageBitmap(result);
}
}
你为什么需要这个?它没有多大用处,还带有
@hide
的注释,意思是“不供公众使用”。你发布的两个链接根本不是一回事,@worldssender,在我看到的版本中,它没有注释hidden@ci_是的,我意识到这一点,我在寻找对概念或模式的解释,也许用安卓系统example@tbone,在您提供的第一个链接中
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
new DownloadFilesTask().execute(url1, url2, url3);