【发布时间】:2021-02-20 19:27:25
【问题描述】:
由于 AsyncTask 已被弃用。我想在后台下载图像,但我不知道如何在不扩展到 AsyncTask 的情况下实现异步功能。我需要一些替代方法来在后台下载图像
package com.developoNetwork.ImageDownload;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Logger;
import javax.net.ssl.HttpsURLConnection;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
public void imageDownload(View view){
ImageDownloader imageDownloader = new ImageDownloader("https://i.pinimg.com/originals/ca/76/0b/ca760b70976b52578da88e06973af542.jpg");
try {
imageDownloader.download();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
}
//Download Image
public class ImageDownloader{
String urls;
ImageDownloader(String url){
urls = url;
}
public void download() {
System.out.println("Start");
try {
Logger.getLogger("Start");
// ImageView imageView = findViewById(R.id.imageView);
URL url = new URL(urls);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
Bitmap image = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(image);
Logger.getLogger("Done");
} catch (MalformedURLException e) {
System.out.println("Error Malformed");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Exception");
e.printStackTrace();
}
}
}
}
问题 我怎样才能实现异步行为。因为它现在已弃用。 android开发中是否有替代在后台下载图像。
我在 stackoverflow 上阅读了使用线程执行后台任务的解决方案,但是当我按下按钮下载图像时,它会使应用程序崩溃。
【问题讨论】:
-
使用图像加载库,例如 Glide 或 Picasso。它们会自动为您处理后台线程。
标签: java android android-studio asynchronous android-asynctask