下载大型(> 500mb)zip文件时Appcelerator App崩溃

时间:2016-04-08 15:18:27

标签: ios iphone appcelerator appcelerator-titanium

我们目前正在开发一款带有Appcelerator的iOS应用程序,该应用程序将媒体文件存储在设备上供以后查看(pdf,mp4,压缩网页)。

我们现在面临的问题是500MB以上的文件导致iPhone上的应用程序崩溃。该应用程序正在iPad2上运行,但下载这些文件时,所有测试的iPhone都会崩溃(随机)。

通过ti.compression解压缩文件(所有媒体文件都在存档中附加了其他信息)。

使用的代码是(细分到相关部分):

var zipDownloader = Ti.Network.createHTTPClient({
'onload' : function() {
    var tempname = Math.floor((Math.random() * 10000000) + 1);

    var dir = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, 'tempDownloads', tempname);
    dir.createDirectory();

    filename = '' + tempname + '.zip';
    var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, 'tempDownloads', filename);
    f.write(this.responseData);
    var Compression = require('ti.compression');

    var zipFileName = Ti.Filesystem.applicationDataDirectory + 'tempDownloads/' + filename;
    var outputDirectory = Ti.Filesystem.applicationDataDirectory + 'tempDownloads/' + tempname + '/';
    var start = Math.floor(Date.now() / 1000);
    var result = Compression.unzip(outputDirectory, zipFileName, true);
    var finished = Math.floor(Date.now() / 1000) - start;
    f.deleteFile();
    Compression = null;
    this.callback(outputDirectory);
}
});
zipDownloader.open('GET', url);
zipDownloader.callback = callback; // given in previous code, not relevant
zipDownloader.send();

1 个答案:

答案 0 :(得分:3)

设置HTTPClient(https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Network.HTTPClient-property-file)的文件属性,而不是在下载后写入文件。

这适用于较大的文件,因为它将数据直接写入文件。否则它将首先尝试缓存您的文件,并且您的应用可能会因内存错误而崩溃。尝试使用500 + MB文件