如何使用 Asynctask 将下载从主线程移动到后台线程

How to move the download from main thread to background thread using Asynctask

我是 Android 开发人员的初学者,我正在尝试了解如何下载多个文件。我浏览了一个简短的 YouTube 教程,该教程下载了一个 PDF 文件,但它是在主线程中进行的。我也想解决此代码的一些问题,但现在,我想知道如何将 AsyncTask 合并到我的代码中以在后台下载 PDF 文件。

这是我的代码:

public class MainActivity extends AppCompatActivity {

    Button btn;
    DownloadManager downloadManager;
    private String exampleURL = "https://doc.lagout.org/programmation/Actionscript%20-%20Flash%20-%20Flex%20-%20Air/Flash%20Development%20for%20Android%20Cookbook%20-%20Labrecque%20-%20Packt%20%282011%29/Flash%20Development%20for%20Android%20Cookbook%20-%20Labrecque%20-%20Packt%20%282011%29.pdf";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.download_btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
                Uri uri = Uri.parse(exampleURL);
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                Long reference = downloadManager.enqueue(request);
            }
        });
    }
}

我知道有些人会问 "Long reference" 在那里做什么,因为它从未使用过。 Tbh idk 以及个人既没有解释也没有在任何地方使用它但是当我从代码中删除它时下载似乎不起作用。

此代码的另一个问题是,与 chrome 等应用程序的传统下载不同,您不会收到任何提示信息,告诉您下载已开始,您需要向下拖动小部件以查看是否正在进行下载。换句话说,它下面的屏幕没有显示下载的迹象。

您正在尝试解决一个不存在的问题。

将下载请求放在 AsyncTask 中没有意义,因为 DownloadManager 已经为您异步下载。