AsyncTask 替代背景图像下载? (AsyncTask ---------已弃用)

Posted

技术标签:

【中文标题】AsyncTask 替代背景图像下载? (AsyncTask ---------已弃用)【英文标题】:AsyncTask Alternative for background image Download? (AsyncTask ---------Deprecated) 【发布时间】: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开发中是否有替代在后台下载图像。

我在 *** 上阅读了使用线程执行后台任务的解决方案,但是当我按下按钮下载图像时,它会使应用程序崩溃。

【问题讨论】:

使用图像加载库,例如 Glide 或 Picasso。它们会自动为您处理后台线程。 【参考方案1】:

为了运行你有的后台任务

多线程 Rx Java 协程 (Kotlin)

在以上三个协程中首选,因为它易于学习,效率更高

【讨论】:

以上是关于AsyncTask 替代背景图像下载? (AsyncTask ---------已弃用)的主要内容,如果未能解决你的问题,请参考以下文章

如果使用 Asynctask 将 URL 存储在 ArrayList 中,如何从服务器下载图像?

Android多线程分析之五:使用AsyncTask异步下载图像

如何从服务器下载图像如果使用Asynctask存储在ArrayList中的URL?

通过 AsyncTask 下载图像并将其显示在 Imageview 中而不存储在 sdcard 中

Android多线程分析之五:使用AsyncTask异步下载图像

通过AsyncTask下载图像并将其显示在Imageview中而不存储在SD卡中