Ale*_*der 0 service android download
我有一个活动,它有两个listview.第一个listview有音乐.第二个列表视图显示下载项目,每个下载项目显示下载百分比的进度条.如果用户单击音乐项,我将下载项添加到第二个列表视图并使用AsyncTask启动下载文件.用户可以点击多个音乐,这意味着同时下载多个文件.我可以使用AsyncTask下载文件.但我想下载服务中的文件因为下载必须继续甚至应用程序关闭.
我不知道如何与服务同时下载多个文件.我应该遵循哪些步骤?有没有这方面的教程?
我在我的一个制作应用程序中实现了相同的功能:
IntentService即使应用程序关闭也将负责在后台下载数据.这Service应该一直运行,直到表队列不为空.它应该仅在添加新项目时启动,或者当网络连接状态从无效更改为实时时启动.在此范围内,Service您应该检查队列是否为空.如果为空,则从表中提取N个行以添加到queue(ExecutorService)中进行下载.检查网络状态的chnage创建一个BroadcastReceiverwith ?LocalBroadcastManager.现在您可以在DownloadIntentService中编写代码.尝试根据您的需要进行修改:
private static int NUMBER_OF_CORES =
Runtime.getRuntime().availableProcessors() * 2;
private final ExecutorService executorService;
private final ExecutorCompletionService<DownloadModel> executorCompletionService;
public DownloadIntentService() {
super("DownloadIntentService");
executorService = Executors.newFixedThreadPool(NUMBER_OF_CORES);
executorCompletionService = new ExecutorCompletionService<>(executorService);
}
......
@Override
protected void onHandleIntent(Intent intent) {
//Check to see for storage permission
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
.....
//Now create job queue
....
//Fetch rows to download from table
DownloadQuery downloadQuery = new DownloadQuery(DownloadIntentService.this);
ArrayList<DownloadModel> downloadModelArrayList = downloadQuery.getDownload(DownloadContract.IFileDownloadStatus.NOT_DOWNLOADED,
0, NUMBER_OF_CORES);
//Check if queue contains any item
if (downloadModelArrayList.size() > 0) {
if (!executorService.isShutdown())
executorCompletionService.submit(new DownloadWorkerCallable(**Your download model from table to download**, DownloadIntentService.this));
}
.....
//Don't forget to shutdown the executorService
}
}
Run Code Online (Sandbox Code Playgroud)这DownloadWorkerCallable是实现Runnable实际下载文件.
| 归档时间: |
|
| 查看次数: |
5645 次 |
| 最近记录: |