Apertura de la cámara en un proceso diferente

Una de mis aplicaciones tiene un problema de recreación de actividad seria en algunos dispositivos de Kitkat Samsung . El problema aparece más frecuentemente cuando se toman fotografías, y no se observa en Jellybean Samsung mierda Jellybean Samsung s con la mitad de la RAM. Los registros muestran una condición de memoria baja, aunque no se están OutOfMemoryException . Creo que hay una política de cierre de actividad más agresiva en Kitkat (o la aplicación por defecto de la cámara tiene fugas).

Me preguntaba si el sistema operativo cierra mis actividades cuando la memoria de mi aplicación es alta, o en su lugar se cierra cuando la memoria total utilizada por todas las aplicaciones es alta. Si el sistema operativo tenía un umbral por proceso, entonces tal vez la apertura de la cámara en un proceso diferente podría ayudar.

Sé que es posible iniciar un servicio en su propio proceso utilizando el atributo de process en el manifiesto. Asumiendo que no existe ningún atributo equivalente para Activities , si inicié un servicio de proxy en su propio proceso y luego inicié una actividad de este servicio, ¿se ejecutaría la actividad también en este proceso?

El comportamiento descrito está totalmente de acuerdo con la documentación de los fundamentos de la aplicación de la que está claro que "abrir la cámara en un proceso diferente" no le ayudará, sólo porque esto es lo que ya sucede por defecto:

Cuando el sistema inicia un componente, inicia el proceso para esa aplicación (si aún no se está ejecutando) e instancia las clases necesarias para el componente. Por ejemplo, si la aplicación inicia la actividad en la aplicación de cámara que captura una foto, esa actividad se ejecuta en el proceso que pertenece a la aplicación de cámara, no en el proceso de la aplicación.

Por lo tanto, cuando la aplicación de cámara se pone en primer plano, su aplicación va a fondo, lo que hace que sea uno de los candidatos a ser asesinado por el sistema cuando es baja en la memoria como por procesos y ciclo de vida de la aplicación . Estás presenciando el comportamiento de un sistema operativo normal. La cantidad total de RAM no es un punto clave. Memoria libre de la cantidad disponible para el proceso en primer plano.

Dicho esto, la respuesta a su pregunta es No. Cualquier Activity inicia y se ejecuta dentro de la aplicación (proceso) en la que se declaró originalmente a través del archivo de manifiesto, independientemente del proceso de la solicitud de inicio.

El comando

 adb shell ps | grep 'app_name' 

Le indicará en qué procesos se está ejecutando su aplicación de cámara.

Dos aplicaciones pueden ejecutarse en el mismo proceso sin embargo, pero el requisito previo necesario para esto es la misma firma de las aplicaciones … De los fundamentos de la aplicación :

Es posible organizar dos aplicaciones para compartir la misma ID de usuario de Linux … Las aplicaciones con el mismo ID de usuario también pueden arreglarse para ejecutarse en el mismo proceso de Linux y compartir la misma VM (las aplicaciones también deben estar firmadas con el mismo certificado) .

  • Android BroadcastReceiver: ejecutarlo en el proceso por defecto o en uno nuevo?
  • ¿Los fragmentos con setRetainInstance (true) sobreviven al cierre del proceso?
  • Cualquier manera de comprobar si un proceso en ejecución es un proceso del sistema en android
  • ¿Va a correr un servicio Android en un proceso diferente, contribuir al mismo límite de montón?
  • Lista de todos los procesos en ejecución en Android
  • La notificación sigue en la barra después de matar al servicio
  • Android runtime.getruntime (). Exec () obtener id de proceso
  • El método android finish () no borra la aplicación de la memoria
  • ¿Por qué debo comenzar el servicio de urbanairship como un proceso separado?
  • ¿Cómo puede una aplicación de Android tener más de un proceso?
  • Android: mantener vivo un servicio de fondo (prevenir la muerte del proceso)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.