Android: ¿Cómo liberar recursos cuando termina la aplicación?

He creado una aplicación que utiliza la cámara y durante la ejecución de la aplicación, la pantalla está siempre encendida.

En el método onCreate () agregué el bloqueo:

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); this.mWakeLock.acquire(); 

Y este es el método onStop () de overriden:

 @Override protected void onStop() { if(mWakeLock.isHeld()) { mWakeLock.release(); } super.onStop(); } 

Pero después de la terminación de la aplicación la pantalla permanece encendida todo el tiempo y si ejecuto la aplicación de la cámara encuentra un error que obviamente aparece porque los recursos de la cámara no son liberados.

¿Alguien sabe cómo liberar todos los recursos en la terminación de la aplicación?

Me gustaría mover el bloqueo de OnCreate() a OnResume() . Desea el bloqueo durante la vida visible de la Actividad, no durante toda la vida de la Actividad. You Activity definitivamente podría estar corriendo con otra Actividad corriendo delante de ella.

Me gustaría mover el lanzamiento a OnPause() . OnPause() es el punto más temprano que su aplicación normalmente debería ser eliminada por el sistema operativo.

Además, no comprobaría para ver si tengo la cerradura antes de lanzar. Si utiliza OnResume() para adquirir el bloqueo; isHeld siempre debe ser verdadero en OnPause() .

Suena como si su aplicación nunca está llamando a la liberación en el Wakelock – es posible que está lanzando una excepción anterior en onStop o onPause ? Incluiría un registro donde estás llamando a liberación para confirmar que está siendo ejecutado.

En cualquier caso, definitivamente querrá mover los métodos de acquire y release en onResume y onPause respectivamente. El código que obtenga sólo adquirirá el WakeLock la primera vez que se inicie su aplicación.

Gracias al fondo de Android de procesamiento de su código tiene un desequilibrio potencial. Si el usuario pulsa la tecla de inicio para cambiar de aplicación, se liberará el bloqueo. Si cambian de nuevo a su aplicación onCreate no se llamará, por lo que el bloqueo nunca será adquirido.

Su mejor opción es construir el WakeLock en onCreate (como usted tiene), adquirir el bloqueo onResume y liberarlo en onPause (incluyendo la llamada a isHeld). Esto garantizará que el bloqueo se llevará a cabo cada vez que su aplicación está en primer plano.

Yo uso mWakelock.setReferenceCounted (false), aún no sé lo que significa, pero resuelve mi problema "Wakelock under-locked".

Init: OnStart () adquiere: onResume () release: onStop ()

Tuve problemas para liberar datos cuando estaba usando OpenGL. Así que ahora, con android.os.Process.killProcess (android.os.Process.myPid ()); Funciona como yo quiero !!

Gracias Arte

¿A dónde llamas finish ()?

Debería liberar sus recursos en onPause y no en onStop. No hay ninguna garantía de que onStop siempre será llamado antes de que su actividad sea asesinada. Si el sistema necesita recursos entonces puede matar la actividad antes de llamarse onStop.

Intente poner registros de depuración y rastrear la ruta de ejecución cuando crea que su aplicación está siendo finalizada.

  • Bitmaps de Android en la memoria de fugas xml?
  • ¿Cómo se determinan los valores de identificador de recursos en Android?
  • ¿Cuál es el estado de los idiomas de Right To Left en Android?
  • ¿Cómo encontrar cadenas sin traducir? (androide)
  • ¿Cómo obtener URI de un archivo de activos?
  • Configuración de android: versionName como referencia a cadena de recursos lleva a NullPointerException en el emulador
  • ID de recurso de Android
  • Android: getString () de los recursos pierde las etiquetas de la cadena
  • Android: diferentes diseños que tienen elementos con los mismos IDs exactos - funciona, pero ¿por qué?
  • Eliminación automática de cadenas no referenciadas de strings.xml
  • ¿Es JPG realmente sólo aceptable para su uso en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.