java - 下一个下载线程中断前一个下载线程 : why?

标签 java android multithreading

@Override
public void run() {
    try {

        downloadTaskObserver.onPendingStarted();

        File dir = new File(Environment.getExternalStorageDirectory(), RMConfig.RM_FOLDER);
        dir.mkdirs();
        String sFileName = dir + "/" + trackInfo.getTrackMetadata().getTrackId() + ".mp3";
        File root = new File(sFileName);

        if (!root.exists()) {
            root.createNewFile();
        } else {
            return;
        }

        HttpGet mHttpGet = new HttpGet(trackInfo.getMediaUrl());
        HttpResponse response = WSManager.getInstalnce().getRHHttpsClient().execute(mHttpGet);
        InputStream zipStream = response.getEntity().getContent();
        FileOutputStream fOut = new FileOutputStream(root);

        long fileSize = Long.valueOf(response.getFirstHeader("Content-Length").getValue());

        long byteCount = 0;
        byte[] buffer = new byte[4096];
        int bytesRead = -1;

        downloadTaskObserver.onDownloadStarted();

        while ((bytesRead = zipStream.read(buffer)) != -1 && !cancelDownload) {
            fOut.write(buffer, 0, bytesRead);
            byteCount += bytesRead;

            int value = (int) (byteCount * 100L / fileSize);
            downloadTaskObserver.onUpdateProgress(value);
        }
        if (fOut != null) {
            fOut.flush();
            fOut.close();
        }
        if (zipStream != null) {
            zipStream.close();
        }

        if (!cancelDownload) {
            downloadTaskObserver.onDownloadFinished();
        }

    } catch (Exception e) {
        e.printStackTrace();

        downloadTaskObserver.onDownloadError();
    }
}


public interface DownloadTaskObserver {
    public void onPendingStarted();
    public void onDownloadStarted();
    public void onDownloadFinished();
    public void onDownloadCanceled();
    public void onUpdateProgress(int percent);
    public void onDownloadError();
}



public void addToDownloadQueue(GetTrackPlaybackInfo trackInfo, DownloadTaskObserver downloadTaskObserver) {
        DownloadTask downloadTask = new DownloadTask(trackInfo, downloadTaskObserver);
        mDownloadTasks.add(downloadTask);
//      mDownloadTasksPool.execute(downloadTask);
        new Thread(downloadTask).start();
    }

但是每次当我开始下载另一个线程时,前一个线程似乎已经完成了。这里有什么问题是我看不到的?预先感谢您的帮助。

I/BrowseActivity(17104): Thread-16 onPendingStarted...
I/BrowseActivity(17104): Thread-16 onDownloadStarted...
E/BrowseActivity(17104): percent 0
E/BrowseActivity(17104): percent 10
E/BrowseActivity(17104): percent 20
Thread-16 onDownloadFinished...    
I/BrowseActivity(17104): Thread-17 onPendingStarted...
I/BrowseActivity(17104): Thread-17 onDownloadStarted...
E/BrowseActivity(17104): percent 0
E/BrowseActivity(17104): percent 10

最佳答案

HttpResponse response = WSManager.getInstalnce().getRHHttpsClient().execute(mHttpGet);

getRHHttpsClient()每次都会给你一个新的客户端,还是回收旧的客户端?

关于java - 下一个下载线程中断前一个下载线程 : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751958/

相关文章:

java - 我在哪里可以找到tomcat本地部署的 war ?

java - 执行 CronJobSchedulingExample 时出现以下错误

JAVA String replaceAll hashtag内容

android - Cordova 的状态栏通知插件错误

android - 约束布局 : center view on full screen but limit width to not overlap with side views

frameworks - JavaBeans激活框架: is it worth learning?

java - canRead() 和 canWrite() 都返回 false

android - 如何在不同的线程中生成列表并填充到 ListView 中?

java - GUI 应用程序上的多线程

multithreading - Qt中临界区的实现