记一次 item.resume 断点续传可能引起的内存泄漏问题
mainWindow.webContents.session.on(
'will-download',
(event, item, webContents) => {
let value = 0;
item.on('updated', (event, state) => {
if (state === 'progressing') {
if (item.getReceivedBytes() && item.getTotalBytes()) {
value = parseInt(
(item.getReceivedBytes() / item.getTotalBytes()) * 100
);
mainWindow.webContents.send('updateProgressing', value);
}
} else if (state === 'interrupted') {
//sendLogToRender('info', `Download is interrupted but can be resumed`);
//是否可恢复下载
// if (item.canResume) {
// item.resume();
// }
}
});
item.once('done', (event, state) => {
if (state === 'completed') {
} else if ('interrupted' === state) {
} else {
mainWindow.webContents.send('updateProgressing', value, 'fail');
}
});
}
);
上面注释部分可以实现断点续传功能,在 updated 回调中如果状态是 interrupted 此时的下载状态是可以被恢复的,方法是:" item.resume ( ) "
但是这儿地方不能写这个语句,原因是,加入你的下载出问题,比如下载路径不正确,可能会导致不停的断点续传,然后‘死循环’,导致内存泄的问题,千万要注意
本文探讨了在使用Electron框架开发应用时,断点续传功能可能导致的内存泄漏问题。具体分析了在下载任务中断后尝试自动恢复下载过程中出现的潜在无限循环问题,并提出了解决方案。

5845

被折叠的 条评论
为什么被折叠?



