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

时间:2018-10-08 23:15:04

标签: java android rest android-asynctask android-download-manager

我是Android开发人员的初学者,我试图弄清楚如何下载多个文件。我看过一个简短的YouTube教程,该教程下载了一个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); } }); } } 合并到我的代码中,以便在后台下载PDF文件。

这是我的代码:

{{1}}

我知道有人会问“长引用”在这里做什么,因为它从未使用过。 Tbh idk也是如此,这个人既没有解释也没有在任何地方使用它,但是当我从代码中删除它时,下载似乎无法正常工作。

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

1 个答案:

答案 0 :(得分:2)

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

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