manager - ¿Cómo puedo evitar que mi aplicación/servicio de Android sea "eliminado" desde un administrador de tareas?
best task manager android (6)
No hay una manera de evitar esto directamente, sin un dispositivo rooteado. El SDK ayuda a prevenir este tipo de problemas.
Puedes hacer el truco "verdaderamente malo" y tener dos servicios en dos aplicaciones. Cada servicio supervisa al otro y lo reinicia si se detiene. Esto es torpe, pero en la mayoría de los casos, incluso el niño más veloz no pudo matar ambas aplicaciones.
Es muy importante que mi servicio siga funcionando hasta que alguien con una contraseña lo detenga desde la pantalla de mi interfaz de usuario. Mi aplicación funciona muy bien, pero está diseñada para ser activada / desactivada por los padres (con una contraseña) en los teléfonos de sus hijos. Me las arreglé para hacer que todo funcionara, pero el problema que tengo es que si el niño usa un administrador de tareas para terminar mi servicio, mi aplicación no sirve para nada. Le agradecería a cualquiera que conozca una forma de hacerlo.
1) supervise el servicio y vuelva a iniciarlo automáticamente si está "muerto" o 2) impide que alguien pueda matarlo, excepto por la actividad (pantalla de administración) que inició el servicio. ¿O ambos?
Lo siento si no soy muy claro al describir el problema, soy un principiante. He hecho grandes progresos hasta ahora, pero estoy atrapado en este último obstáculo.
Para cualquier persona que todavía esté buscando una respuesta, ésta puede ser correcta:
no puede: hacer que un servicio no se pueda ejecutar, si se ejecuta en una memoria baja, el sistema siempre anulará su servicio. PERO
puede: Indicar al sistema que reinicie su servicio cuando se cancele. Mira este pedazo de código:
public static final int START_REDELIVER_INTENT
Añadido en el nivel API 5
Constante para regresar de onStartCommand (Intención, int, int):
Si el proceso de este servicio se cancela mientras se inicia (después de regresar de onStartCommand (Intent, int, int)), se programará un reinicio y la última Intentencia entregada se volverá a entregar nuevamente a través de onStartCommand (Intent, int, En t). Esta Intención seguirá programada para su reenvío hasta que el servicio llame a stopSelf (int) con el ID de inicio proporcionado a onStartCommand (Intent, int, int). El servicio no recibirá una llamada onStartCommand (Intención, int, int) con una Intención nula porque solo se reiniciará si no se termina de procesar todas las Intenciones que se le envían (y los eventos pendientes se entregarán en el punto de reinicio).
Valor constante: 3 (0x00000003)
Puede escribir una aplicación de ayuda para recibir la transmisión de android "android.intent.action.PACKAGE_RESTARTED" , cuando se elimine su aplicación, su asistente recibirá esa transmisión y podrá reiniciar su aplicación o lo que sea.
Así es como ''Smart App Protector Free'' lo hace.
Lo malo es que los usuarios deben instalar dos aplicaciones en lugar de una.
Si tiene permisos de nivel de sistema, use persistent:true
través de los permisos de manifiesto.
https://developer.android.com/guide/topics/manifest/application-element
Solo establece el tipo de retorno como START_TICKY.
Puede utilizar el método API: startForeground()
. Aquí está la explicación de ello:
Un servicio iniciado puede usar la API startForeground (int, Notification) para poner el servicio en un estado de primer plano, donde el sistema considera que es algo que el usuario conoce activamente y, por lo tanto, no es un candidato para matar cuando hay poca memoria. (En teoría, todavía es posible que el servicio se cancele bajo una presión de memoria extrema de la aplicación de primer plano actual, pero en la práctica esto no debería ser una preocupación).
Here puedes encontrar un ejemplo de cómo usar esto.
En cuanto a la pregunta, no puedes evitar que un servicio sea asesinado. Puede ser matado por el sistema. Incluso los servicios del sistema pueden ser eliminados. Si esto sucede se reinician. Puede utilizar el mismo enfoque.