你创建的Downloader变量 应该是个全局或者类变量吧 你把它值空,刷新一下 自然就中断了
进入某个页面,设置全局的 _downloader = null
下载文件是这样用的:
if (!this._downloader) {
this._downloader = new jsb.Downloader()
}
this._downloader.setOnTaskError(function (task, errorCode, errorCodeInternal, errorStr) {
}.bind(this))
this._downloader.setOnTaskProgress(function (task, bytesReceived, totalBytesReceived, totalBytesExpected) {
var str = "下载大小 = " + bytesReceived + “,” + "总大小 = " + totalBytesReceived + “,” +
"预期总大小 = " + totalBytesExpected + “,” + "进度 = " + Math.floor(totalBytesReceived / totalBytesExpected * 10000) / 100 + “%\n”
console.log("progress: " + str)
}.bind(this))
this._downloader.setOnFileTaskSuccess(function (task) {
console.log(task.requestURL + "download success " + task.storagePath)
}.bind(this))
let task = this._downloader.createDownloadFileTask(fileUrl, filePath, "downloadFile")
}
退出的时候把_downloader = null 了,但是没用,页面都干掉了,setOnTaskProgress的log还在持续输出,直到下载完成,根本停不下来
那个人乱讲的。从原理角度就不会是那样
你定义的变量 被滞空,被垃圾回收了 它还能存在?
jsb的下载是在native层执行的。并不是js层。你拿到的js组件只是一个通讯实例。所以它是否存在,跟底层是否在进行传输,并无直接关系。
我是完全重写了cocos 2.4.4引擎的这一块,自己实现的热更。所以对这个还是有足够的信心跟你对线的。
我经常再逻辑层下载大文件 经常超时,那么就需要重新下载,重新下载的方式就是重新建立一个对象 继续下载,如果按你说的 引擎层不释放资源 还继续下 那么就会有多个下载任务同时在下载同一个文件 并写到同一个临时文件里,那么这种过程 就要出错了,但结果是正常的 说明前面的下载的任务 会被中断,对象消除掉了
1、你那个属于重试机制。事实上跟底层资源管理并没直接关联。
2、以现在设备的体量,就算真浪费了资源,泄漏在那里,你是感觉不到的。
还有,你说的前提是超时,也就是原本的任务已经停止了。
再说,底层其实可以让你多个downloader使用同一个下载任务的引用,只要url一致,这些技术上都是可能的。
再说一个,就是cocos的downloader下载回调有bug,会丢失任务。我给官方报过。
是在标题上@215194780 ?
就是在这里 @ 就行
abort 没导出 
我干脆都放弃了你们这个没人维护的下载和升级功能。。。
我用的版本也比较老,知道你们不会再改进。
我正在尝试导出abort 
不用非得超时啊 下载中 也可以人为停止的 比如下载时间过长 用户想停止 那就让用户中断就是了 过一会用户可能还要想继续,那就继续,如果按你说的 后台还再继续下载 那也是冲突的 但实际上运行正常
static bool js_network_Downloader_abort(se::State& s)
{
cocos2d::network::Downloader* cobj = (cocos2d::network::Downloader*) s.nativeThisObject();
SE_PRECONDITION2(cobj, false, “js_network_Downloader_abort : Invalid Native Object”);
const auto& args = s.args();
size_t argc = args.size();
CC_UNUSED bool ok = true;
if(argc == 1) {
cocos2d::network::DownloadTask *arg0;
ok &= seval_to_native_ptr(args[0], &arg0);
SE_PRECONDITION2(ok, false, "js_network_Downloader_abort : Error processing arguments");
cobj->abort(*arg0);
return true;
}
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1);
return false;
}
ok &= seval_to_native_ptr(args[0], &arg0); 到这句错误了,没法转换,seval_to_native_ptr 里的T ptr = (T)v.toObject()->getPrivateData(); 出错了,为null
请教大神该如何正确转换?
你所谓的清除对象并不能起到这个作用。不信要么你问问官方。
或者我承认你说的都对也行。
毕竟我不是干script boy的,我的视角也不是只看到脚本层。
可以参考 3.x 的导出修改,
要结合自动绑定来处理:
https://docs.cocos.com/creator/2.4/manual/zh/advanced-topics/jsb-auto-binding.html?h=自动绑定