java - AsyncTask 类的 onProgressUpdate() 不起作用
问题描述
我想显示下载图像的进度条并设置自定义颜色我在 onProgressUpdate() 中执行此操作,但它不起作用,它也不会出现在 logcat 中。它还会显示白屏,直到下载完成,如果我在下载过程中按下后退按钮下载,它会崩溃。
我的代码:
public class DownloadImage extends AsyncTask<String ,Void, Bitmap> {
Bitmap bit;
@Override
protected Bitmap doInBackground(String... urls) {
try {
URL url = new URL(urls[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
return BitmapFactory.decodeStream(connection.getInputStream());
} catch(Exception e){
Log.i("error download", "doInBackground: "+e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
Log.i("download", "onPostExecute: ");
imageView.setImageBitmap(bitmap);
progressBar.setVisibility(View.GONE);
}
@Override
protected void onProgressUpdate(Void... values) {
Log.i("download", "onProgressUpdate: ");
imageView.setColorFilter(R.color.imagecolor);
}
}
和 onCreate() 方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
imageView = findViewById(R.id.imageView2);
progressBar = findViewById(R.id.progressBar2);
DownloadImage downloadImage = new DownloadImage();
downloadImage.execute("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRaL6woz3RgMF-UXU682S_BYb1ayl5xaVancp0PPvF2HnCDmPsb");
try {
downloadImage.get();
} catch (Exception e){
}
}
解决方案
我想显示下载图像的进度条并设置自定义颜色我在 onProgressUpdate() 中执行此操作,但它不起作用
您需要从 拨打publishProgress()
电话doInBackground()
。这将触发对onProgressUpdate()
. 你没有这样做,所以onProgressUpdate()
不会被调用。
它还会显示白屏,直到下载完成
删除你的downloadImage.get();
电话。这将阻塞主应用程序线程,使用AsyncTask
(或其更现代的替代品)的目的是不阻塞主应用程序线程。
如果我在下载过程中按返回按钮,它会崩溃。
如果活动/片段被销毁,则不应更新 UI。因此,您需要确认onPostExecute()
更新 UI 是否安全(例如,调用isDestroyed()
活动)。
推荐阅读
- apache-kafka - Kafka Connect:用于有条件替换字段值的 SMT
- tomcat - 使用根 uri ("/") 部署 .war 文件
- jenkins - Kubernetes - 来自服务器的错误没有找到已知地址的首选地址 - AWS EKS
- html - 水平居中 div 的特定用例
- spring-boot - java.lang.ClassNotFoundException:org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener
- c++ - 如何继续使用 macOS Catalina 10.15.4 处理 OpenGL?
- c - sscanf 与动态分配的字符串兼容吗?
- go - 如何在 Golang 中将 *uint16 指针传递给 windows.CreateFile()
- css - 从 css 规则中排除自定义类
- javascript - Materialise CSS 的自动完成功能不起作用(Javascript + Google Apps 脚本)