GLBasic forum

Other languages => GLBasic - es => Topic started by: msx on 2013-Aug-15

Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-15
Hola a todos, necesito que me digáis si vosotros tenéis el mismo problema que yo en Android. Resulta que al iniciar mi aplicación (que no juego ;)) me aparecen unos puntitos como dando entender que está cargando y se lleva un rato muy grande, alrededor de 80 segundos. Ésto solo ocurre la primera vez, pero es un problema gordo porque la gente piensa que no funciona y lo borra. ¿Hay alguna forma de evitar ésto o de poner un mensaje diciendo que se está instalando la aplicación?

Gracias a todos
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-15
En Android me tarda como 8 segundos en arrancar mi juego, no es normal que te tarde tanto. ¿No estarás cargando muchas cosas al inicio del programa? Y los puntos no me salen tampoco, no uso la beta sino la versión 10.283. Es un poco raro lo que te pasa. ¿Ocupa muchos megas tu aplicación?
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-15
Que tal, pues mira la verdad es que solo me lo hace al arrancar la primera vez. Uso la última beta que ha salido y he intentado mostrar una imagen inicial antes de cargar todo el grueso para probar si era eso y nada. Ocupará unos 40 MB porque lleva mucha imagen pero no va en memoria sino que carga conforme hace falta.

Lo de los puntitos ahora que lo dices creo que en la v10 no lo hacia. Trataré de hacerlo desde ahí para ver si mejora.
Title: Re: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-15
Bueno, ya tengo más información sobre mi caso.

Lo primero es que mi aplicación ocupa 8 Mb y no 40 Mb como dije antes, craso error por mi parte por contestar sin comprobarlo antes.

Después decir que creo que ya sé cual es el problema. Resulta que tengo 635 archivos de imágenes que aunque ocupan muy poco, creo que es lo que provoca que tarde tanto en arrancar la rimera vez. Parece como si hiciera un preprocesado de las imágenes la primera vez que se inicia y claro, al haber tantos archivos se lleva como 80 segundos para iniciar la primera vez. Las sucesivas veces el arranque es bastante rápido.

¿Habría alguna forma de optimizar el arranque?, ¿sabéis algo al respecto?.
Title: Re: Carga inicial muy lenta en Android
Post by: erico on 2013-Aug-16
Hi msx. It seems the first install is a process that can take some time for whatever andrioi stuff apk you or anyone may have. The 3 dots loading is there for that reason. Normal stuff. Maybe we can have personal first loading screen? :)
Title: Re: Carga inicial muy lenta en Android
Post by: mentalthink on 2013-Aug-16
Pues Msx (rebienvenido hombre  =D =D =D, estás por ahí agazapaó).

A mi se me ocurren un par de ideas chaperas... Lo primero si no bajas del tiempo y dices que son 80 segundos, ponle un reloj que se vea como baja el tiempo a medida que cargas

O por ejemplo como tengo yo una barra de carga...

En realidad es sencillo y coñazo, te haces una funcion con un INC variable,1 un rectangulo o lo que queires y un showscreen(), y en cada loadsprite , pones despues o antes del loadsprite o load anim... Yo lo tengo asi y me va de lujo porque a veces me tarda 20 segundos o más depende lo que cargué.

También si no es mucho follón en vez de cargar todo a la vez, haz que carguén un numero de imagenes, y cuando cargués por ejemplo la primera pantalla puesa cagas los que te faltan, al menos de esté modo no está intranquilo el cliente porque ya está dentro de la aplicación...

COmo ves no es que sean muy técnicas pero si te pueden servir, mejor que mejor.

PS: Aunque es una gilipollez que lo diga, ya que tu eres programador profesional, vigila a ver si has cargado algo con bucles, o tienes alguna cosilla mal, aunque 635 archivos los veo demasiado, (no podrías meterlos en Atlas o en sprites en dónde tengas más imagenes de golpe.?¿)

Saludos , me alegro de verte por aqui. :good:
Title: Re: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-16
Hola a ambos y gracias por contestarme.

@erico No me refiero a que tome tiempo en instalarse puesto que eso es algo normal y además está gestionado todo por Android, por lo que no hay problema de que el usuario se desespere.
Lo que a mí me ocurre es que una vez instalado el APK, cuando el usuario carga la aplicación por primera vez, aparecen los puntitos durante 80 segundos, lo cual puede dar a entender que se ha colgado.
Debería poder cambiarse los puntitos por un mensaje personalizado que diga algo como "Este proceso tardará unos minutos la primera vez, por favor espere..." o algo parecido para que el usuario esté avisado y no se ponga nervioso, la mayoría creo que lo desinstalan pensando que no funciona.
Quizás Gernot nos pueda orientar sobre como personalizar la pantalla inicial.

@mentalthink
Amigo Iván, sigo por aquí, entro y leo tus post (bueno y los demás, erico, hardyx, Hark0, etc...), aunque a veces no los conteste por las prisas. Lo primero decirte que ni soy programador profesional ni lo pretendendo ser, solo soy aficionado y autodidacta, con lo que todo lo que pueda aprender de vosotros será bienvenido.

Lo segundo explicarte un poco mi problema que quizás no lo he expuesto bien del todo.
Resulta que al instalar el APK en el dispositivo Android y arrancarlo por primera vez, aparecen unos puntitos en medio de la pantalla, que Gernot colocó ahí en la v11 para que se viera que está haciendo algo y no una pantalla negra conmo ocurría en la v10, y se lleva ahí procesando sobre 80 segundos. Esto solo ocurre la primera vez, puesto que las demás veces que arranques la aplicación tarda sobre 5 segundos lo cual me da a pensar que puede ser que la primera vez haga algún tipo de procesamiento supongo que de las imágenes.

Hice la siguiente prueba, mi aplicación como expliqué antes, dispone de unas 635 imágenes, la mayoría de unos pocos Kb. Lo que hice es quitar la carpeta de imágenes para ver si era problema de código y volví a testear la aplicación en mi Android, con lo que conseguí que se ejecutara en 3-4 segundos. De esta forma pude deducir que la primera vez coge las imágenes y hace algo con ellas que en las demás veces no hace, con lo que pasa de tardar 80 segundos a tardar 5 segundos.

No me importaría tanto este tiempo inicial de carga si pudiera mostrar una pantalla personalizada informando al usuario que la aplicación puede demorarse la primera vez que se ejecute.

Otra cosa, las 635 imágenes no las cargo de una vez, sino que voy cargandolas en memoria conforme las necesito en un mismo Sprite, machacando la anterior por lo que el uso de la memoria no es tanto. En cualquier caso he probado a mostrar una imagen inicial antes de cargar nada y el resultado sigue siendo el mismo, por eso creo que es independiente del código.
Title: Re: Carga inicial muy lenta en Android
Post by: mentalthink on 2013-Aug-16
Entiendo yo es que como el Android apenas lo he tocado no sabia esto. Pues no sabría...

Has comentado que si quitas las imagenes tarda 3 o 4 segundos... Se me ocurre,
porque no haces una carga de 1 jpg anterior a todo el código que tienes , en teoria deberia dejarte mostrar una sola imagen en poco tiempo, una vez que has avisado pues le das a ese código de los 600 y pico sprites... deberia funcionar no?¿...

No se si me entiendes, pero creo que eso debería funcionar, quizás se enfollone un poco el código, pero tampoco creo que sea un gran galimatias.


Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-16
Si. Eso ya lo intenté, viene por ahí en el tocho que he escrito. Pero no funciona. Sigo creyendo que hace algún tipo de pre procesamiento de la carpeta Media la primera vez que se arranca, quizás para optimizar, aunque sean imágenes que no llegues a usar nunca.
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-16
Buenas, ¿porque no pruebas a cargar UNA anim que contenga los 600 sprites?

Haces los "tiles" del tamaño del sprite más grande... y para los que sean pequeños... fondo transparente, que en teoria ya lo tienes...

Igual cargar UN SOLO png, te acelera el proceso...

Luego cambias la rutina de pintado de sprites por la de anims...

Ya nos cuentas...

Saludos ;)
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-16
Sobre lo de los puntitos, entiendo que eso sale mientras carga "la parte GLB" (antes que tu porgrama)...

Intenta meter un cls y un print "cargando" como primeras func, a ver que pasa...

Si se trata de la "precarga" de GLB, me temo que poco puedes hacer.... :blink:
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-16
Lo pensé pero se me formaría un lío tremendo en el código porque tendría que recalcular las posiciones de todos los sprites ya que están calculado para los diversos tamaños que tienen. Y me da una pereza...

No se si Gernot podría darnos la posibilidad de cambiar los puntitos por un mensaje personalizado.

PD: me has pisado con otro post, este es de respuesta al primero ;)

Lo de GLB me parece raro porque el retardo solo es la primera vez que se arranca.
Title: Re: Carga inicial muy lenta en Android
Post by: mentalthink on 2013-Aug-16
QuoteBuenas, ¿porque no pruebas a cargar UNA anim que contenga los 600 sprites?

Que va Hark0 eso lo probé al principio de tener GLBasic con unas 100 imagenes y peta enseguida, aunque lo probe con imagenes grandes, pero eran Jpg's de 40 kb, quizás si se ponen las imagenes en el Heap, que yo aún no sé si GLbasic trabaja todo en la pila que creo que si, por lo que dice de los ejecutables de 40 Mb.. Pero quizás eso de trabajar en el Heap no sea común e igual para PC, androides y demas cosas...

PS: Yo creo que para poder cargar una animación hay que hacer algún invento de streaming, por ejemplo con dos arrays activar uno y luego el otro e ir cambiando como un semaforo, en carga y descarga de memoria... que quizas no funcione tampoco...

Sorry por  :offtopic:
Title: Re: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-16
Nueva prueba que confirma mis sospechas.

He hecho una pequeña aplicación que muestra el texto ¡Hola mundo!. Al probarlo en Android ha tardado menos de un segundo en ejecutarse. Ahora he cogido y he añadido la misma carpeta Media de mi otra aplicación, la que tiene 665 archivos de imágenes y he vuelto a compilar para Android. Ahora la aplicación tarda casi 80 segundos en arrancar la primera vez, y eso que las imágenes no sirven para nada. Por lo tanto se confirma que no es problema de código, sino que por algún motivo GLB hace una especie de preprocesado de la carpeta Media la primera vez que se carga.

¿Alguna solución?

Title: Re: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-16
Pues parece que el problema ya se expuso en el foro inglés.

http://www.glbasic.com/forum/index.php?topic=7949.0

¿Alguien con conocimiento me dice como puedo cambiar los puntitos por un loading...?
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-17
Quote from: msx on 2013-Aug-16
Pues parece que el problema ya se expuso en el foro inglés.

http://www.glbasic.com/forum/index.php?topic=7949.0

¿Alguien con conocimiento me dice como puedo cambiar los puntitos por un loading...?

Pues según dicen, no se puede acceder a las imágenes en el .apk (no se sabe bien porqué), y por eso se copian en un directorio de datos de la aplicación la primera vez. En teoría editando el SDLActivity.java que está en el directorio del compilador de Android se podría cambiar ese mensaje. Parece ser que los puntintos lo han añadido hace poco, porque antes no estaba.
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-17
Lo siento pero no tengo androide para ayudaros... :(
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-17
Supongo que ésto en la mayoría de los casos no es un problema, pero cuando resulta que son 665 archivos... Claro que no es lo mismo copiar 1 archivo de 20 Mb por ejemplo que 700 archivos aunque sean de 1kb, como ocurre en mi caso.

Será cuestión de seguir indagando.

Hark0 por favor, no es posible que no tengas un androide todavía, si sólo falta que lo regalen con las magdalenas.
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-17
Quote from: msx on 2013-Aug-17
Supongo que ésto en la mayoría de los casos no es un problema, pero cuando resulta que son 665 archivos... Claro que no es lo mismo copiar 1 archivo de 20 Mb por ejemplo que 700 archivos aunque sean de 1kb, como ocurre en mi caso.
¿No tienes manera de optimizar esas cientos de imágenes? Por ejemplo, si son animaciones, pues ponlas en archivos (por personajes o temas) y las cargas con LOADANIM.

También deberías probar a usar un archivo "shoebox" con todos los recursos, es como un comprimido que gestiona GLB automáticamente y no tienes que cambiar nada del código. Mirate la instrucción SETSHOEBOX.
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-17
Recuerdo en los inicios de GLB que hice pruebas con shoebox y pensé en eso también como una solución, pero nunca lo he probado en android y no se como se comportará. De todas formas lo intentaré, gracias por la recomendación.
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-18
Off Topic!

@msx, En verdad mi mujer tiene un ACE (pantalla muy pequeña)... y a mi hija le ha de llegar un clon del S3 desde China ;)
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-18
Gracias hardyx, he conseguido reducir de 80 segundos a 40 con shoebox, algo es algo aunque sigue siendo bastante.

@Hark0. Es posible que tengas android hasta en el microondas y sin que lo sepas :).
Title: Re: Carga inicial muy lenta en Android
Post by: mentalthink on 2013-Aug-18
Pues esto parece la batalla de los S.O de mobiles y teles, ahora Samnsung saca otro, meggo vuelve a la carga, sale el de Firefox, y para final de año salen los telefonos con Ubuntu, que a mi parcer va a estar realmente bien... Lo curioso como nadie compró el WebOS con lo bueno que era, o al menos a mi me lo pareció.

A mi lo que me extraña es que China no haya sacado, o si lo ha sacado aqui no se entera ni Dios, un sistema Operativo para hacer la competencia a los grandes basados en Linux... a mi personalmente Android me da un poco de full, eso de que sea virtualizado supongo que se come el telefono por la mitad, si no lo fuese supongo que el rendimiento comparado con el iPhone sería extremadamente superior...
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-19
Quote from: mentalthink on 2013-Aug-18
Pues esto parece la batalla de los S.O de mobiles y teles, ahora Samnsung saca otro, meggo vuelve a la carga, sale el de Firefox, y para final de año salen los telefonos con Ubuntu, que a mi parcer va a estar realmente bien... Lo curioso como nadie compró el WebOS con lo bueno que era, o al menos a mi me lo pareció.

A mi lo que me extraña es que China no haya sacado, o si lo ha sacado aqui no se entera ni Dios, un sistema Operativo para hacer la competencia a los grandes basados en Linux... a mi personalmente Android me da un poco de full, eso de que sea virtualizado supongo que se come el telefono por la mitad, si no lo fuese supongo que el rendimiento comparado con el iPhone sería extremadamente superior...

China=copia, creo que Departamento de I+D como tal no saben ni que es...

@msx...  :D
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-19
Quote from: msx on 2013-Aug-18
Gracias hardyx, he conseguido reducir de 80 segundos a 40 con shoebox, algo es algo aunque sigue siendo bastante.
Bien, ahora intenta agrupar las imágenes en archivos de tiles si es posible.

Otra cosa que creo es que en teléfonos con poca memoria como el Galaxy Mini o el Ace puede fallar la instalación en el proceso de copiar las imágenes si ya hay varias aplicaciones instaladas. Eso puede ser un problema.
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-19
Como dice @Hardyx, creo que vas a tener que pasar de sprites a anims SI o SI...

Readaptar la rutina de graficos no deberia ser un problema... ;)
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-19
No creo que eso solucione nada. Ahora el vez de 665 archivos tengo solo 1. Aunque lo agrupe en tiles seguiré teniendo 1 solo archivo, y el tamaño será más o menos el mismo. El problema es que tarda en copiar 7Mb quizás dependiendo del móvil tardará más o menos. La prueba la he hecho en una HP touchpad con android.
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-20
Quote from: msx on 2013-Aug-19
No creo que eso solucione nada. Ahora el vez de 665 archivos tengo solo 1. Aunque lo agrupe en tiles seguiré teniendo 1 solo archivo, y el tamaño será más o menos el mismo. El problema es que tarda en copiar 7Mb quizás dependiendo del móvil tardará más o menos. La prueba la he hecho en una HP touchpad con android.

No estoy del todo de acuerdo...

Ninguna máquina tarda lo mismo en copiar 1 fichero de 7mb, que 600 ficheros de X Kb....

Ahora bien, lo que dices acerca de la velocidad de copiado del dispositivo de turno me lo creo...

No todos los smarphones, son smarphones... me explico...

Hay máquinas con Androide, que si, se supone son smarphones... en la práctica... impracticables de usar... mi hija gastaba un Toshiba Android... que ni con pedales....

hmmmm

¿puedes poner una muestra de los gráficos?
¿has pensado en pasarlos a 256 colores en lugar de 16/24 bits?

¿Cuando se descarga una aplicación desde la Store no se instala del tirón?
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-21
Quote from: msx on 2013-Aug-19
No creo que eso solucione nada. Ahora el vez de 665 archivos tengo solo 1. Aunque lo agrupe en tiles seguiré teniendo 1 solo archivo, y el tamaño será más o menos el mismo. El problema es que tarda en copiar 7Mb quizás dependiendo del móvil tardará más o menos. La prueba la he hecho en una HP touchpad con android.

Bueno, 7 megas no es mucho para un juego. Si un móvil tarda mucho en copiarlos, es que es un móvil lento  =D, investiga para cambiar los puntitos de carga, tiene que estar en el código de SDLActivity.java. Aún así, shoebox no es la panacea, tienes un archivo, pero es un poquito más lento que usar archivos sueltos. La copia será más rápida, pero si cargas 50 gráficos en tu juego de un golpe, tendrás 50 accesos al disco con shoebox también.

Si organizas los gráficos por ficheros de tiles, en vez de 50 accesos al disco podrías tener dos o tres. Ganas en velocidad. También puedes optimizar los gráficos, recortando sólo la parte imprescindible sin bordes que no se usen, usando 16 bits de color en vez de 24 o 32, o usando PNG en vez de BMP, por ejemplo.
Title: Re: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-21
Si pudieras bajar a png 256 colores, fijo que bajas de 7mb.

:good:
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-22
Os contesto a los dos porque creo que queréis decirme más o menos lo mismo. Todos mis archivos son PNG de 32 bits. He intentado bajarlos a 256 colores pero pierdo la transparencia y me salen efectos raros con lo que he desistido. La verdad es que bajaba de los 7 Mb a 2 lo cual era muy ventajoso pero me destrozaba los gráficos. En cuanto a los tiles... Llamarme flojo pero no tengo paciencia para agrupar 700 archivos de imágenes.

De todas formas es posible que eso solo lo haga cuando lo envías desde el GLB y no si lo descargas desde play store. O eso espero :P
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-22
Quote from: msx on 2013-Aug-22
Os contesto a los dos porque creo que queréis decirme más o menos lo mismo. Todos mis archivos son PNG de 32 bits. He intentado bajarlos a 256 colores pero pierdo la transparencia y me salen efectos raros con lo que he desistido. La verdad es que bajaba de los 7 Mb a 2 lo cual era muy ventajoso pero me destrozaba los gráficos.

De todas formas es posible que eso solo lo haga cuando lo envías desde el GLB y no si lo descargas desde play store. O eso espero :P
Intenta bajar a 16 bits de color, si lo haces bien no se debería notar nada (y ahorras la mitad de bytes). Sobre el retardo, creo que te va a ocurrir siempre, porque está en la inicialización de la aplicación la primera vez.
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-22
Probé a bajar a 24 bits (el Xnconvert no me permite a 16) y aunque conserva la transparencia algunas imágenes me cambian el fondo a colores raros. Me redujo a 5 Mb el peso de los archivos, pero como ya digo me "estropea" algunas imágenes.
Title: Re: Carga inicial muy lenta en Android
Post by: mentalthink on 2013-Aug-22
Quizás si pruebas con otro soft aunque tengas que hacer un poco la pirula te va bien... Yo recuerdo en el fantasy bricks que la carpeta de Media me ocupaba 20 Mb y con el FireWorks de Adobe, que es para optimizar imagenes para la web y tal, me dejo la carpeta en unos 2 o 3 mB y no tuve problemas...

o Quizás el ACDSee, creo que puede optimizar si no me equivoco...
Title: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-22
hmmm

deja a 24 solo las que fallen... algo ahorraras.... ;)

puedes probar con graphics gale, va muy bien ;)
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-22
Uno que permita modificar por lotes que no tengo tanta paciencia :)
Title: Carga inicial muy lenta en Android
Post by: Hark0 on 2013-Aug-22
irfanview bajate el exe y los plugins
Title: Re: Carga inicial muy lenta en Android
Post by: hardyx on 2013-Aug-22
Quote from: msx on 2013-Aug-22
Uno que permita modificar por lotes que no tengo tanta paciencia :)
Paint Shop Pro, creo que permite hacerlo por lotes y hacer conversiones perfectas.
Si has podido hacer 600 gráficos, no que quejes ahora que puedes optimizarlos :D
Title: Carga inicial muy lenta en Android
Post by: msx on 2013-Aug-22
¿Quien ha dicho que yo haya hecho 600 gráficos :P ? Internet es muy amplio y tiene muchas cosas. Además de que soy nefasto para el dibujo, lo mío es una aplicación de resultados de fútbol con lo que pocos gráficos tengo que hacer, los escudos y las banderas están por internet ;).

Voy a probar con el paint shop pro que ahora que lo dices, recuerdo que tenía para editar archivos por lotes y además lo tengo instalado. El infanview será la siguiente opción :).

Gracias a todos por vuestra perseverancia :)