2011-02-23 9 views
6

Comencé a convertir esta aplicación de flex para ejecutar en Android utilizando el nuevo flex hero sdk. Ya reemplacé todos los componentes incompatibles con dispositivos móviles y lo ejecuté varias veces con éxito.Invalid BitmapData randomness

Cuando utilizo las mismas bibliotecas que ejecutan la aplicación web original, funciona perfectamente.

Sin embargo, el gran problema son estos errores aleatorios de BitMapdata Invalid al iniciar la aplicación móvil. Aquí está toda la salida.

ArgumentError: Error #2015: Invalid BitmapData. 
at flash.display::BitmapData/ctor() 
at flash.display::BitmapData() 
at spark.primitives::BitmapImage/http://www.adobe.com/2006/flex/mx/internal::applySource()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\BitmapImage.as:1337] 
at spark.primitives::BitmapImage/http://www.adobe.com/2006/flex/mx/internal::validateSource()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\BitmapImage.as:1652] 
at spark.primitives::BitmapImage/commitProperties()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\BitmapImage.as:902] 
at spark.primitives.supportClasses::GraphicElement/validateProperties()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\supportClasses\GraphicElement.as:3487] 
at spark.components::Group/commitProperties()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\components\Group.as:931] 
at mx.core::UIComponent/validateProperties()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\core\UIComponent.as:8095] 
at mx.managers::LayoutManager/validateProperties()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\managers\LayoutManager.as:597] 
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\managers\LayoutManager.as:760] 
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1157] 

I depurado muchas veces y he encontrado que cuando se llega a este método

mx_internal function applySource():void 
{ 

en BitmapImage.as, en este comunicado

if (!bitmapData && tmpSprite) 

la bitmapData == null. Sin embargo, cuando ejecuto la aplicación web original, bitmapData no es nulo. valor La bitmapData debe determinarse en esta línea de código

<s:BitmapImage id="smallTriangle" smooth="true" source="@Embed('/com/xploreplus/components/containers/panel/assets/images/smallTriangle.png')" /> 

Ahora me parece que, Wile ejecutar la aplicación móvil, es incapaz de encontrar la imagen, como cuando corro la aplicación web, utilizando el mismo biblioteca donde está la línea de código anterior, puede encontrar la imagen.

Este problema me ha estado persiguiendo durante días y realmente estoy empezando a pensar que esto es un error, especialmente porque a veces se ejecuta. O hay algo que me falta aquí.

+0

Hubo algunas correcciones de errores desde la versión Hero Release Release de MAX que pueden haber solucionado este problema. ¿Has probado la última versión de Hero? Puede obtener la última versión registrándose en el programa de presentación preliminar: http://iamdeepa.com/blog/?p=85 –

+0

Hola steven. Actualmente estoy usando la compilación MAX Preview (4.5.0.17689) que se puede encontrar en la página de descarga de adobe para el SDK héroe porque las compilaciones posteriores no son compatibles con las funciones móviles. Me inscribí en el programa de presentación hace unos días. Estar involucrado en este programa significa que obtendré las últimas compilaciones, incluidas las funciones para dispositivos móviles? También he "corregido" temporalmente el error inválido del bitmapdata quitando mis skinclasses por todos lados, parece que el error fue lanzado por otro problema. No he tenido tiempo de profundizar en eso. Entonces el programa se ejecuta ahora, pero aún sin mostrar ningún img – vegasaurus

+1

No es probable que sea su problema, pero he visto el error Invalid BitmapData esporádicamente cuando: 1) Un mapa de bits es demasiado grande. 2) Cuando mi aplicación se queda sin memoria (asignar un BitmapData tiende a empujarlo por el borde) 3) Y al intentar actualizar un bitmap de datos con un tamaño no válido. No uso mucho Flex pero, ¿puede incluir el código donde asigna la variable bitmapData de BitmapImage con id "smallTriangle?" – DoomGoober

Respuesta

2

Estoy casi seguro de que esto es un problema de memoria. El hecho de que el error esté en el constructor BitmapData dice que la aplicación está intentando crear un BitmapData con dimensiones no válidas (no es probable ya que funciona en la otra compilación y la imagen se obtiene en tiempo de compilación) o el escenario más probable que Flash se ha quedado sin memoria y no puede crear BitmapData (los dispositivos móviles generalmente tienen mucha menos memoria que una PC).

+0

Esto puede ser un trabajo para un bloque de prueba/captura: es posible que pueda tener una mejor idea de lo que sucede si puede detectar el error durante el tiempo de ejecución. –

Cuestiones relacionadas