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

Java 如何使用Asynctask将下载从主线程移动到后台线程,java,android,rest,android-asynctask,android-download-manager,Java,Android,Rest,Android Asynctask,Android Download Manager,我是一个Android开发者的初学者,我正试图弄清楚如何下载多个文件。我看过一个简短的YouTube教程,下载了一个PDF文件,但它是在主线程中完成的。这段代码也有一些问题,我想讨论一下,但现在,我想知道如何将AsyncTask合并到我的代码中,以便在后台下载PDF文件 这是我的代码: public class MainActivity extends AppCompatActivity { Button btn; DownloadManager downloadManager

我是一个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);
            }
        });
    }
}
我知道有些人会问“长引用”在那里做什么,因为它从未被使用过。Tbh idk以及个人既没有解释,也没有使用它的任何地方,但下载似乎不工作,当我把它从代码中删除


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

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


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

我几乎可以肯定DownloadManager API是异步的。下载时它不会阻止主线程。您应该能够同时将所需数量的文件排队,而不会出现问题。DownloadManager不仅是异步的,它还发生在另一个进程中。将对它的调用移动到线程没有任何价值。你不可能真正下载一个主线程上的文件而不跳过很多障碍-你会得到一个NetworkOnMainThreadException@TheWanderer还有加布。非常感谢你。我对你们俩都投了赞成票,如果你们和加布认为这是一个被问得很好的问题,你们能不能给我一个赞成票?谢谢。虽然已经更正了,但我还是很感激你的回答。我接受了你的回答,并投了你一票。如果你认为这个问题问得很好,你能不能也给我一票?