¿Qué significa el botón "Forzar detención"?

26

Cuando voy a Settings > Applications > Manage Applications > Downloadedver una lista de aplicaciones. Si selecciono algunas aplicaciones, veo el botón "Forzar detención" activo, pero algunas aplicaciones tienen este botón atenuado.

Qué significa eso? ¿Qué sucede si presiono este botón?

Este botón no puede significar la ejecución de la aplicación, ya que las aplicaciones con este botón no se enumeran en la Runningsección.

¿Puedo enumerar solo las aplicaciones que tienen el Force stopbotón activo y desinstalarlas?


Versión de Android: 3.2

Suzan Cioc
fuente

Respuestas:

18

Como dije en mi comentario a la respuesta de Paco, la información que dio es en su mayoría correcta: la mayoría de las aplicaciones no se cierran por completo si las dejas, y ninguna aplicación debería salir si la dejas a través del botón "Inicio". Además, algunas aplicaciones tienen servicios en segundo plano que el usuario no puede abandonar.

Ahora hay algunas situaciones en las que necesita detener una aplicación (incluidos sus servicios en segundo plano), por ejemplo, si desea desinstalar esa aplicación (o, en el caso de una aplicación del sistema, sus actualizaciones). Notarás esto cuando el botón "Forzar detención" esté activo, el botón "Desinstalar" (o "Eliminar") estará atenuado, pero este último se activará cuando detuviste la aplicación a través de "Forzar detención". (Si ambos botones están en gris, puede decir que es una aplicación del sistema, por cierto, que no puede desinstalar).

Por cierto: si el botón "Forzar detención" está en gris ("atenuado" como lo dice) significa que la aplicación no se está ejecutando actualmente, ni tiene ningún servicio en ejecución (en ese momento).

Izzy
fuente
1
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out, ¿puedes dar una aplicación de ejemplo que tenga este comportamiento? Acabo de hojear algunas de mis aplicaciones y descubrí que los botones "Forzar detención" y "Desinstalar" están activados. Estoy en Android 4.4.2.
cychoi
1
Como mi respuesta ya tiene 2 años, Kitkat no estaba disponible en ese momento; Este comportamiento podría haber cambiado o no afectar a todas las aplicaciones. No puedo probar con Kitkat (ningún dispositivo ejecuta eso), y fuera de mi cabeza no recuerdo con qué paquetes he visto eso, lo siento.
Izzy
15

El código detrás del botón de detención de Force es complejo e indocumentado. Lo reproduciré literalmente y luego lo revisaré una pieza a la vez.

private void checkForceStop() {
    if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
        // User can't force stop device admin.
        updateForceStopButton(false);
    } else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
        // If the app isn't explicitly stopped, then always show the
        // force stop button.
        updateForceStopButton(true);
    } else {
        Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
                Uri.fromParts("package", mAppEntry.info.packageName, null));
        intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
        intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
        intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
        getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
                Activity.RESULT_CANCELED, null, null);
    }
}

La primera iflínea verifica si algún componente del paquete es un administrador del dispositivo (es decir, si está marcado en la lista de administradores del dispositivo en la página Seguridad de la aplicación Configuración ). Si es así, el botón está deshabilitado (atenuado) para que no pueda detener a los administradores del dispositivo.

Luego, else ifcomprueba si el paquete ya está detenido . Aquí, detenido no solo significa "no correr". Por lo que puedo decir, un paquete está en estado detenido si nunca ha ejecutado ningún componente desde él (como al iniciarlo desde el menú), o si ha presionado un botón Forzar detención (este o en un cuadro de diálogo "dejó de funcionar") y no vuelva a ejecutar ninguno de sus componentes. Si el paquete no se ha detenido, el botón está habilitado .

El elsecaso cubre la rara posibilidad de que una aplicación se haya detenido y no sea un administrador del dispositivo. En este caso, le da a otros servicios del sistema la oportunidad de habilitar el botón. Por ejemplo, la aplicación podría tener una alarma configurada y pendiente, lo que luego provocaría que la aplicación se reiniciara incluso desde el estado detenido. En este caso, el botón estará habilitado. Si ningún otro servicio del sistema tiene un motivo para habilitar el botón, se desactivará.

Resumen

El botón Forzar detención está habilitado si el paquete no es un administrador del dispositivo y si aún no ha detenido forzosamente esta aplicación o la ha forzado pero un servicio del sistema cree que la volverá a ejecutar.

Si la aplicación se está ejecutando (y no es un administrador de dispositivo), el botón Forzar detención definitivamente se habilitará, pero el botón que se habilita no significa que la aplicación se esté ejecutando.

Dan Hulme
fuente
Es genial que nos muestres el código que determina si el botón se muestra o no. Para un desarrollador como yo, esa es la respuesta perfecta. Pero realmente, esta es solo la mitad de la respuesta. No muestra lo que sucede cuando realmente presiona el botón.
John Pankowicz
2

Android mantiene 4 tipos de aplicaciones en su memoria. No recuerdo todos, pero el fondo en ejecución y en caché son 2 de ellos ... (se puede acceder al fondo en caché haciendo clic en el botón del menú de hardware cuando está en la pestaña de ejecución y seleccionando la opción desplegada)

Entonces, aunque no se vea en los procesos en ejecución , no está completamente muerto.

Principalmente estará en los procesos de fondo en caché .

también, sobre los administradores de tareas ... No se recomienda usarlos ya que Android ha sido codificado para administrar aplicaciones de manera eficiente. Los asesinos de aplicaciones / tareas en realidad prefieren agotar la batería, ya que después de que el asesino mata las aplicaciones, de acuerdo con el algoritmo que Android sigue, se iniciarán de nuevo (y las aplicaciones ocupan bastante más memoria al inicio que en el estado ideal), por lo que se convierte en un ciclo y agota la batería.

por lo que el botón de cierre forzado está activo en la mayoría de los procesos en ejecución y en caché y puede existir en muy pocas aplicaciones que residen en los otros dos tipos de procesos.

en otras aplicaciones está fuera de control!

Nirmik
fuente
1
Son más de 4 tipos (vea Explicación de los ciclos de vida de las aplicaciones y actividades de Android para obtener una explicación más detallada). Pero esas clases no tienen nada que ver con el botón "forzar detención", al menos no directamente (vea mi respuesta : un botón activo "forzar detención" simplemente significa que la aplicación en sí o uno de sus servicios registrados se está ejecutando actualmente).
Izzy
-2

Este botón está activo para aplicaciones que se están ejecutando o se están ejecutando desde la última vez que inició su dispositivo.

Android no elimina totalmente las aplicaciones cuando sale de él, este botón es para cerrar completamente la aplicación y eliminarla de la pila (aplicaciones en ejecución), también este botón libera la memoria utilizada por la aplicación.

No hay forma de enumerar las aplicaciones que se ejecutan, también las aplicaciones que se ejecutan en segundo plano tienen este botón.

Hay aplicaciones asesinas gratuitas en Play Store para administrar la memoria de su dispositivo automáticamente.

pacoespinoza
fuente
3
Si bien la información básica es correcta: mejor elimine la parte sobre los "asesinos automáticos". Es posible que haya habido algún tiempo en que se necesitaban (antes de Android 2.x), pero son absolutamente contraproducentes y tienen un efecto negativo sobre el tiempo de ejecución de la batería.
Izzy