我使用AIR和ActionScript 3 (使用IntelliJ IDE)创建应用程序
在应用程序启动时,它会加载一些zip文件并提取其文件以将它们放入本地存储中。未来使用(或者如果用户杀死则重新打开应用程序)
在大多数情况下它正常工作没有问题,除了我有时具有非常低的外观率,在下载这些zip文件期间应用程序崩溃。 奇怪的是,这些崩溃可以直接在我的计算机上的模拟器中发生(带有指示AIR中的错误的消息)。
确实很难检查,因为这些崩溃可能会发生,就像四十次启动时一样,并且当 trace()处于调试模式时似乎永远不会发生。 这让我觉得它可能是加载速度的问题,因为所有 trace()都会减慢启动和加载文件的速度。 显然,这不是内存崩溃。我已经测试并使用相同的代码将大量相同的zip加载到一起并且它不会崩溃。
我无法直接显示代码,因为它植入了更复杂的框架中。 有关的代码就是这样的:
private static function fileLoad( url:String ):void
{
var loader:URLLoader = new URLLoader();
var header:URLRequestHeader = new URLRequestHeader( "pragma" , "no-cache" );
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener( Event.COMPLETE, complete );
var request:URLRequest = new URLRequest( url );
request.requestHeaders.push( header );
request.method = URLRequestMethod.GET;
loader.load( request );
}
private static function complete( event:Event ):void
{
var file:File;
file = File.applicationStorageDirectory.resolvePath( "ZIP.zip" );
var bytes:ByteArray = event.target.data as ByteArray;
var stream:FileStream = new FileStream();
stream.open( file , FileMode.WRITE );
stream.writeBytes( bytes );
stream.close();
var loadZip:Function = function( event:FZipEvent ):void
{
var zip:FZipFile = event.file;
if ( zip.sizeUncompressed != 0 )
{
var fileData:Object = {};
var file:File = outputFile.resolvePath( zip.filename );
var stream:FileStream = new FileStream();
file.preventBackup = true;
stream.open( file, FileMode.WRITE );
stream.writeBytes( zip.content );
stream.close();
}
};
var inputFile:File = File.applicationStorageDirectory.resolvePath( "ZIP.zip" );
var outputFile:File = File.applicationStorageDirectory.resolvePath( "folderZip" );
var zipFileBytes:ByteArray = event.target.data as ByteArray;
stream = new FileStream();
stream.open( inputFile , FileMode.READ );
stream.readBytes( zipFileBytes );
stream.close();
var zip:FZip = new FZip();
zip.addEventListener( FZipEvent.FILE_LOADED , loadZip );
zip.load( new URLRequest( inputFile.nativePath ) );
}
我真的不希望得到一个完整的解决方案,但如果您遇到类似的问题,我将非常感谢您知道您为解决问题所采取的措施。
非常感谢