有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是Android developer的初学者,我正在努力弄清楚如何下载多个文件。我在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消息,告诉你下载已开始,你需要向下拖动小部件以查看是否正在下载。换句话说,向下的屏幕上没有显示下载的迹象


共 (1) 个答案

  1. # 1 楼答案

    你在试图解决一个根本不存在的问题

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