Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Por qué llamar a Process.killProcess (Process.myPid ()) es una mala idea?

He leído algunos mensajes diciendo que usar este método es "no es bueno", no se debe utilizar, no es la forma correcta de "cerrar" la aplicación y no es cómo android funciona …

Entiendo y acepto el hecho de que Android OS sabe mejor que yo cuando es el momento adecuado para terminar el proceso, pero no he escuchado todavía una buena explicación de por qué está mal utilizando el método killProcess () ?. Después de todo – es parte de la API de Android …

Lo que sé es que llamar a este método, mientras que otros hilos haciendo en potencial un trabajo importante (operaciones en archivos, escribir en DB, las solicitudes HTTP, ejecutar servicios ..) se puede terminar en el medio, y claramente no es bueno. También sé que puedo beneficiarse del hecho de que "volver a abrir" la aplicación será más rápida, porque el sistema tal vez todavía "se mantiene" en estado de memoria de la última vez que se ha utilizado, y killProcess () impide que.

Además de esta razón, suponiendo que no tengo tales operaciones, y no me importa mi aplicación se cargará desde cero cada ejecución, hay otras razones por qué no utilizar el método killProcess() ?

Conozco el método finish () para cerrar una Actividad, así que no me escriba sobre eso por favor .. finish() es solo para Activity . No a toda la aplicación, y creo que sé exactamente por qué y cuándo usarlo …

Y otra cosa – estoy desarrollando también juegos con el marco de Unity3D, y la exportación del proyecto a Android. Cuando descompilé el apk generado, me sorprendió mucho descubrir que el código fuente de java creado a partir de la unidad – implementación de Unity – Application.quit() método, con Process.killProcess(Process.myPid()) .

Application.quit() se supone que es la manera correcta de cerrar el juego de acuerdo a las guías de Unity3d (es realmente? Tal vez estoy equivocado, y se perdió algo), así que cómo sucede que los desarrolladores de la estructura de Unity que haciendo un muy buen trabajo como Parece implementado esto en el android nativo a killProcess() ?

  • Entrada de un juego de ritmo
  • Error de segmentación OSX 11 - Android
  • ¿Cómo puedo codificar mi juego para que funcione en cada resolución de dispositivos Android? (Con Unidad)
  • La aplicación que implementa Parse Unity Plugin se bloquea en el dispositivo android pero funciona bien en el editor
  • Integración de Unity3d con android
  • Cómo trabajar con diferentes resoluciones de pantalla
  • Unity 2D: ¿Cómo soportar plataformas múltiples y diferentes dispositivos de relación de aspecto en Unity 2D?
  • Unity3D y AAR
  • 3 Solutions collect form web for “¿Por qué llamar a Process.killProcess (Process.myPid ()) es una mala idea?”

    ¿Quién dijo que llamar Process.killProcess (Process.myPid ()) es una mala idea?

    Sí, dejar que el sistema operativo administre su propia memoria es la mejor práctica tanto para usted como para el usuario que utiliza su aplicación (más rápido para abrir de nuevo, menos posibilidades de cerrar la fuerza, etc …).

    Sin embargo, asumiendo que usted sabe con seguridad que no está interrumpiendo hilos u otras operaciones de fondo y utiliza esta llamada en onDestroy() – No veo ninguna razón por la que no debe usarlo. Especialmente cuando se trata de una llamada de API y no una solución, y Google no mencionó que es mejor no utilizarlo en la documentación de la API.

    <rant>

    En un mundo perfecto, con un código perfecto y bibliotecas, no debería llamar a Process.killProcess(Process.myPid()) y el sistema operativo matará correctamente su aplicación según corresponda. También habrá paz en el Medio Oriente, los cerdos volarán, y el problema de detención será resuelto.

    Debido a que todas estas cosas no han ocurrido todavía, hay momentos en los que necesita ejecutar dicho código 'prohibido'.

    Más recientemente, para un juego Android que hice, la versión gratuita utilizó una biblioteca de anuncios que mantendría la aplicación viva y también la memoria de fugas. La versión de pago no tiene este problema, ya que no hay bibliotecas de anuncios vinculados. Mi solución fue añadir un botón Quit en el menú principal que ejecutó dicho código. Mis esperanzas eran que la mayoría de la gente golpearía este botón cuando hecho y no tengo que preocuparse de él que come encima de la memoria. La versión pagada acabo de ejecutar finish() y terminó. (Esto era antes de las compras en la aplicación de Google estaban disponibles, así que tuve que hacer una versión de pago y libre, también pueden haber arreglado el problema a esta fecha y podría actualizar dicho juego, pero realmente no lo hizo muy bien y yo Duda que cualquier tiempo gastado en él valdría la pena)

    Su tipo de como en la escuela primaria / secundaria te dicen que no se puede tomar la raíz cuadrada de un número negativo. Luego, en una clase de álgebra de nivel superior dicen … bueno, puedes tomar la raíz cuadrada de un número negativo, pero obtienes resultados extraños pero es consistente y resuelve el problema.

    En otras palabras, no ejecute el código 'prohibido' a menos que sepa lo que está haciendo.

    </rant>

    Bueno, Unit3d es muy probablemente usando código nativo, y están matando el proceso como un seguro – no quieren pérdida de memoria. Usted podría discutir si esto es una buena idea o no, pero el hecho de que lo usaron no significa que usted debe también.

    Tal vez hay algunos casos extremos en los que se desea utilizar killProcess() , pero por lo general el sistema operativo hace esto para usted, de acuerdo con la carga actual y el uso. No está seguro de qué tipo de respuesta está buscando: está consciente de que usar killProcess() puede romper cosas, a menos que pueda justificar su uso, no lo use.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.