Java 如何使用Asynctask将下载从主线程移动到后台线程
我是一个Android开发者的初学者,我正试图弄清楚如何下载多个文件。我看过一个简短的YouTube教程,下载了一个PDF文件,但它是在主线程中完成的。这段代码也有一些问题,我想讨论一下,但现在,我想知道如何将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
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还有加布。非常感谢你。我对你们俩都投了赞成票,如果你们和加布认为这是一个被问得很好的问题,你们能不能给我一个赞成票?谢谢。虽然已经更正了,但我还是很感激你的回答。我接受了你的回答,并投了你一票。如果你认为这个问题问得很好,你能不能也给我一票?