[英]How To Resume Download When Internet is Restored or When Activity is Recreated
我正在使用 AsyncTask 使用以下代码从 URL 链接下载视频
public static class DownloadTask extends AsyncTask<String, Void, String> {
WeakReference<MainActivity>weakReference;
DownloadTask(MainActivity activity) {
weakReference = new WeakReference<>(activity);
}
int TIMEOUTTIME = 7000;
int TSOCKET = 30000;
String TAG = "TAG";
@Override
protected String doInBackground(String... strings) {
MainActivity subActivity = weakReference.get();
if (!(activity == null || activity.isFinishing())){
try {
URL url = new URL(subActivity.videoUrl);
long beginTime = System.currentTimeMillis();
Log.i(TAG, "video download starting at: " + subActivity.videoUrl);
//Open a connection to that URL.
URLConnection urlCon = url.openConnection();
urlCon.setReadTimeout(TIMEOUTTIME);
urlCon.setConnectTimeout(TSOCKET);
InputStream is = urlCon.getInputStream();
BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);
activity.fileTitle = "oneTooMuch TYPE.mp4";
FileOutputStream outStream = activity.openFileOutput(activity.fileTitle,MODE_PRIVATE);
byte[] buff = new byte[5 * 1024];
while ((len = inStream.read(buff)) != -1) {
outStream.write(buff, 0, len);
}
outStream.flush();
outStream.close();
inStream.close();
Log.i(TAG, "download completed in "
+ ((System.currentTimeMillis() - startTime) / 1000)
+ " sec");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return "Out Condition";
}
该代码适用于下载视频文件,但是当下载时断开连接时,可能是由于互联网问题或活动的 onDestroy,我需要一种在互联网恢复或活动重新启动时恢复下载的方法。 任何人都可以提供代码片段或提示我如何实现这一点吗? 如果有人能提供帮助,我将不胜感激。
更好的解决方案是使用Service而不是AsyncTask 。 服务与应用程序分开运行并具有更高的优先级。 即使用户关闭应用程序,您也可以让用户继续下载,并向他提供进度通知,这很方便,因为它提供了更好的用户体验,例如用户可以在观看他已经下载的视频的同时下载视频。 为此,您需要将移动服务返回到前台并从onStartCommand返回START_REDILIVER_INTENT 。 此外,如果您不想使用 Service,您可以使用 WorkManager 进行后台操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.