AIR AS3 for Mobile - 下载zip文件会使应用程序崩溃

时间:2014-08-07 15:39:15

标签: actionscript-3 file air crash local-storage

我使用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 ) );
}

我真的不希望得到一个完整的解决方案,但如果您遇到类似的问题,我将非常感谢您知道您为解决问题所采取的措施。

非常感谢

0 个答案:

没有答案