我有一个IntentService
代表下载队列中的一个任务。我收到了要从Intent
onHandleIntent(Intent)
方法下载的数据。
我正在使用改装2进行下载。在我的应用中,您有更大的媒体文件。出于这个原因,我想使用@Streaming
注释。当我这样做时,应用程序会冻结,直到下载完成。我试图将代码包装在Thread
中,但它没有帮助。当我不使用@Streaming
时,我可以在下载过程中浏览应用程序。然而,由于ResponseBody
很大,这会占用大量内存。
@Streaming
@GET
Call<ResponseBody> downloadMediaFile(@Url String directDownload);
服务:
@Override
protected void onHandleIntent(Intent intent) {
if(intent != null && intent.hasExtra(DownloadManager.EXTRA_MEDIA)){
final Media media = intent.getParcelableExtra(DownloadManager.EXTRA_MEDIA);
FeedService feedService = ApiServices.get().getFeedService();
String url = media.getDirectDownload();
Call<ResponseBody> call = feedService.downloadMediaFile(url);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
File resultFile = response.isSuccessful() ? writeResponse(response.body(), media) : null;
LogUtils.LOGD(TAG, resultFile != null ? "Download successful" : "Download unsuccessful");
if(resultFile != null){
EventBus.getDefault().post(new MediaDownloadComplete(media, resultFile));
} else {
onFailure(call, new NullPointerException("No result file received"));
}
if(DownloadManager.get() != null){
DownloadManager.get().nextInQueue();
}
media.setInProgress(false);
stopSelf();
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
media.setInProgress(false);
stopSelf();
}
});
}
}
DownloadManager
是Service
,用于处理下载队列。