[英]Download multiple MP3 files in the background in Android
等級:初學者
語言:Java
IDE:Android Studio
案例:在后台連續下載多個URL中的多個MP3文件。
問題:在循環中下載任務以下載所有網址。 歌曲確實按照以下路徑下載但未完全下載(每首歌曲下載3秒/ 4秒基本上非常少)。 不知道是什么問題,如果我能得到任何幫助,那就太好了
獲取路徑並連續播放。
private class DownloadTask extends AsyncTask<SongDetails, Integer, String> { Context context; public DownloadTask(Context context) { this.context = context; } @Override protected void onPreExecute() { super.onPreExecute(); Utilities.showProgressDialog(getActivity(), getFragmentManager()); } @Override protected String doInBackground(SongDetails... songDetails) { for (SongDetails songs : songDetails ) { donwloadsong(songs); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Utilities.dismissProgressDialog(); } } for (SongDetails songs : songDetails ) { downloadTask(songs); } public void downloadTask(SongDetails songs){ HttpURLConnection httpURLConnection = null; try { URL url = new URL(songs.getUrl()); httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("GET"); httpURLConnection.connect(); int fileLength = httpURLConnection.getContentLength(); InputStream inputStream = new BufferedInputStream(url.openStream(), 8192); OutputStream outputStream1; outputStream1 = new FileOutputStream(Environment.getExternalStorageDirectory() + "/gbeduwarssongs/" + songDetails.getTitle().trim() + ".mp3"); int count = 0; byte data[] = new byte[1024]; int buffer_length; while ((buffer_length = inputStream.read(data)) != -1) { outputStream1.write(data, 0, count); count += buffer_length; } outputStream1.flush(); outputStream1.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); Log.e("Error", "Download Error Exception " + e.getMessage()); } finally { if (httpURLConnection != null) httpURLConnection.disconnect(); } }
而是在新線程內部調用迭代,首先使用迭代,然后在每次迭代中啟動新線程。 我希望它會對你有所幫助。 我發布了您的幫助代碼。
for (SongDetails songs : songDetails) {
new DownloadTask(pass your song object in constructor).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
並在doInBackground中調用您的下載方法。
我提議使用DownloadManager或workmanager 。 AsyncTask使用了一個壞主意。 它存在內存泄漏問題。 asyncTask只使用一個線程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.