2010-03-13 6 views
8

¿Hay algo en las directrices para desarrolladores de Android que disuade a los desarrolladores de proporcionar la opción de "salir" (dejar de ejecutar) una aplicación desde la propia aplicación?¿Por qué las aplicaciones de Android no brindan la opción "Salir"?

Me encanta la multitarea y todo, pero no es claro por qué:

  • la gran mayoría de las aplicaciones no tienen sus propias funciones de salida y por lo tanto sólo seguir funcionando siempre
  • no le damos una elección acerca de la ejecución cuando se enciende el teléfono - que acaba de hacer de forma predeterminada

Ambas cosas conducen al uso de la memoria en constante aumento y que tu dispositivo se carga con este rendimiento todo el tiempo a pesar del hecho de que es posible que solo desee que determinadas aplicaciones ejecuten algunas veces.

¿Echo de menos algo?

+0

posible duplicado de [Salir de una aplicación - ¿es eso desaprobado?] (Http://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned-upon) –

Respuesta

14

¿Hay algo en las directrices Android desarrollador que disuadea desarrolladores de proporcionar la opción a "salida" (dejar de correr) una solicitud desde la aplicación sí?

Sí. Por lo general, no es necesario, al igual que generalmente no es necesario reiniciar un servidor web porque algunos usuarios con un navegador deciden que ha terminado con una aplicación web.

la gran mayoría de aplicaciones no tienen sus propias funciones de salida y por lo tanto sólo seguir funcionando siempre

No mantienen funcionando siempre. Android cerrará las cosas según sea necesario.

no le damos una elección acerca de la ejecución cuando se enciende el teléfono - que sólo lo hacen de forma predeterminada

aquellos desarrolladores aren't paying attention to me.

Ambas cosas conducen al uso de memoria constante aumento

En general, no es así. Si encuentra aplicaciones específicas que hacen esto, desinstálelas.

y su dispositivo se ejecuta con esta carga rendimiento todo el tiempo

En general, no es así. Si encuentra aplicaciones específicas que hacen esto, desinstálelas.

Además, esta pregunta es un duplicado de this one.

+0

Para prestar algún apoyo a las afirmaciones del OP, utilizo el asesino avanzado de tareas y, a menudo, veo una pantalla con aplicaciones enumeradas en las que llevan mucho tiempo cerradas y no puedo pensar por qué todavía se ejecutarán en segundo plano. Es esa lista irrelevante, p. son las cosas que aparecen una implementación o detalle de almacenamiento en caché y no cuestan nada?(Nota: Esto es con las aplicaciones que se envían con el teléfono, no con las cosas que he instalado). – HostileFork

+0

Supone que ATK está informando con precisión lo que se está ejecutando. Android mantiene un caché de procesos de aplicaciones que se han ejecutado pero que ahora están finalizadas. Este caché se puede usar cuando inicie otras aplicaciones más tarde, para ahorrar tiempo en el proceso e inicializar el tiempo de ejecución de Dalvik. Las reglas exactas para cuando utiliza un proceso de caché, por supuesto, no son bien conocidas. El hecho de que ATK afirma que algo está en la memoria RAM no significa que esté causando ningún daño (por ejemplo, el uso de la CPU, lo que impide que otros procesos tengan memoria RAM). – CommonsWare

+3

Se supone que las reglas están bien documentadas aquí: http://developer.android.com/guide/topics/fundamentals.html#proclife Por supuesto, la documentación siempre se puede mejorar. :) Además, si realmente quieres ver lo que está sucediendo, puedes usar "actividad de shell dumpsys adb" - en esa salida hay una lista de todos los procesos con la jerarquía de memoria actual (el valor adj =) en la que se encuentran Los procesos con números más altos serán eliminados antes que los números más bajos. Los números se asignan a las categorías que están en la documentación, aunque los valores exactos han cambiado en las versiones de la plataforma. – hackbod

1

Esencialmente, no hay necesidad de un botón para dejar de fumar, siempre y cuando el desarrollador haga un buen trabajo al diseñar su aplicación. Las actividades de Android se detienen cuando no son visibles y los recursos se necesitan en otro lugar, por lo que ya no consumen recursos. Usted puede leer sobre el ciclo de vida here:

Aquí hay una related question:

8

"Ambas cosas conducen al uso de la memoria en constante aumento"

Lo cual no importa ya aplicaciones de Android están limitados a una cantidad fija de RAM Freeing RAM no dará más RAM a otras aplicaciones.

+0

¿El límite es por aplicación o por todo el sistema? ¿Queda menos memoria para el sistema y como resultado un rendimiento general más lento? No me puedo imaginar que el rendimiento se mantenga constante con 5 aplicaciones en ejecución frente a 10. – Howiecamp

+2

El límite es por aplicación. Y cuando el sistema necesita RAM, mata los procesos. El rendimiento disminuiría si las aplicaciones usan la CPU, pero las aplicaciones generalmente se detienen o detienen cuando se ponen en segundo plano (a menos que estén mal escritas). –

1

Desde la página de Google Android Application Fundamentals:

Apagado componentes Un proveedor de contenido sólo está activa mientras se está respondiendo a una solicitud de un ContentResolver. Y un receptor de difusión está activo solo mientras responde a un mensaje de difusión. Por lo tanto, no es necesario cerrar explícitamente estos componentes.

Las actividades, por otro lado, proporcionan la interfaz de usuario. Están en una larga conversación con el usuario y pueden permanecer activos, incluso cuando están inactivos, mientras continúe la conversación. Del mismo modo, los servicios también pueden seguir funcionando durante mucho tiempo. Así que Android tiene métodos para cerrar actividades y servicios de forma ordenada:

Una actividad puede cerrarse llamando a su método finish(). Una actividad puede cerrar otra actividad (una que comenzó con startActivityForResult()) llamando a finishActivity(). Un servicio se puede detener llamando a su método stopSelf(), o llamando a Context.stopService(). Los componentes también pueden cerrarse por el sistema cuando ya no se usan o cuando Android debe recuperar memoria para más componentes activos. Una sección posterior, Component Lifecycles, analiza esta posibilidad y sus ramificaciones con más detalle.

Parece que los proveedores de contenido y los receptores de difusión nunca deben cerrarse explícitamente, ya que son inertes mientras no manejan sus eventos específicos.

En cuanto a las Actividades, yo argumentaría a favor de ponerle fin, pero en ciertos casos. Si su aplicación tiene un estado finito en el que el usuario ha terminado de usarla, ¿por qué mantenerla activa hasta que GC la obtenga? El administrador de actividades aún necesita realizar un seguimiento de esa actividad mientras el usuario ha terminado su tarea. Mi mejor ejemplo para esto es la Calculadora. Usted lo abre, lo hace resolver un problema para usted, y luego lo cierra. Si la función onCreate es tan costosa que es más efectivo hacer onCreate una vez y luego reiniciar cada vez que el usuario regresa a su aplicación, entonces probablemente esté haciendo algo mal. Tal vez estoy malinterpretando cómo Android maneja las actividades, y si es así, siempre estoy interesado en aprender más :)

-1

Todo vuelve a la respuesta de que los usuarios quieren un control total de su lista de ejecución y de inicio automático y de lo que do y do not want installed, ejemplo: google maps, etc. no hay dos formas de hacerlo.

Cuestiones relacionadas