2010-09-09 5 views
6

De vez en cuando en condiciones de poca memoria del UIImagePickerController utilizo consigue 'pegado' con el obturador cerrado. En general, cuando este WatchDog ya está descartando otras aplicaciones en segundo plano, en uno o dos segundos la condición de memoria baja ha terminado, pero el controlador UIImagePicker todavía está atascado.UIImagePickerController en el modo de cámara se moja o 'pegado' con el obturador cerrado

Alguien más ha encontrado esto y ha implementado cualquier tipo de solución o ha encontrado una forma de detectar cuándo el selector está en este estado, de modo que se puede quitar y poner uno nuevo en su lugar.

Pensamientos/Ideas/Soluciones ??

Respuesta

2

Ha intentado asignar (y luego liberar) un megabyte o dos de memoria usando malloc() antes de iniciar el UIImagePicker? O reclámala un poco antes en tu aplicación, y luego libérala cuando quieras mostrarle el selector.

supongo que debe ser capaz de ver más o menos la cantidad de memoria UIImagePicker necesita para funcionar con éxito por el funcionamiento de su aplicación en el interior de los instrumentos.

Si bien no es ideal, debería causar otras aplicaciones que se dará advertencias de memoria antes de y por tanto la UIImagePicker deben luego tener suficiente memoria para ejecutar.

+0

Si usa un NSTimer repetitivo para programar un montón de mallocs en fragmentos fraccionarios durante varios milisegundos, permitirá que haya más tiempo para que las advertencias de memoria limpien el uso de memoria de cualquier otra aplicación en segundo plano. Luego libere todo esto justo antes de llamar al selector de imágenes. – hotpaw2

+0

@ hotpaw2: Sí, probablemente sea una buena idea, ¡gracias! Creo que hice los bloques bastante grandes (y probablemente no más pequeños que el bloque más grande que requiere UIImagePicker), ya que de lo contrario existe el riesgo de introducir fragmentación en el montón de la aplicación. – JosephH

+0

He jugado un poco con eso. Strangley lo suficiente, simplemente haciendo un alloc –

0

Eso es un comportamiento conocido de la aplicación de la cámara también. Supongo que no puedes hacer nada más que liberar la mayor cantidad de memoria posible antes de comenzar. Podrías escribir un mensaje de advertencia para que cada aplicación lo reciba y empiece a liberar memoria, pero no tengo idea de cómo puedo hacerlo. Empecé a investigar el envío de la notificación yo mismo (UIApplicationDidReceiveMemoryWarningNotification) sin éxito. Supongo que necesitamos enviar un objeto a lo largo de la notificación para definir el nivel de advertencia, pero realmente no estoy seguro.

+0

No se puede levantar una notificación de advertencia del sistema mismo - 'UIApplicationDidReceiveMemoryWarningNotification' es la notificación de que es interno a su aplicación sólo. – rpetrich

+0

@rpetrich: ¡Gracias! – VdesmedT

Cuestiones relacionadas