Red de conocimiento informático - Conocimiento de Internet de las cosas - Cómo mantener los servicios de Android siempre ejecutándose en segundo plano

Cómo mantener los servicios de Android siempre ejecutándose en segundo plano

Los componentes de servicio se encuentran a menudo en el desarrollo de Android. A menudo se utilizan como servicios en segundo plano y deben mantenerse en ejecución para realizar algunas tareas necesarias. Algunos programas de seguridad tienen la función de finalizar el proceso. Si no mantiene el Servicio, este lo matará.

El núcleo de cómo mantener el Servicio en ejecución es utilizar la transmisión del sistema de ANDROID, de modo que no se vea afectado por otros programas residentes de software, activando así su propio programa para verificar el estado de ejecución del Servicio, si muere Si muere, se reiniciará.

El método de uso de la transmisión del sistema es Intent.ACTION_TIME_TICK. Esta transmisión se envía una vez cada minuto. Puede verificar el estado de ejecución del Servicio cada minuto. Si ha finalizado, reinicie el Servicio.

El siguiente es el código específico y las precauciones:

1. Cómo usar Intent.ACTION_TIME_TICK

Los desarrolladores saben que la transmisión se puede dividir en registro estático y dinámico. registro Sin embargo, este sistema de transmisión solo se puede utilizar mediante registro dinámico. Es decir, no puede registrarse para recibir esta transmisión en manifest.xml, sino solo en código a través del método RegisterReceiver().

Registrar transmisión en la aplicación de extensión ThisApp:

filtro IntentFilter = newIntentFilter(Intent.ACTION_TIME_TIME) = newIntentFilter(Intent.ACTION_TIME_TIME).ACTION_TIME_TICK

MyBroadcastReceiver); receptor = new MyBroadcastReceiver();

registerReceiver(receiver, filter);

En el receptor de transmisión, MyBroadcastReceiver extiende BroadcastReceiver en onReceive

if (intent. getAction). ().equals(Intent.ACTION_TIME_TICK)){ // Verificar el estado del servicio}

2.

2. Iniciar

boolean isServiceRunning = false

2. p>

ActivityManager manager = (ActivityManager)ThisApp.getContext().getSystemService( Context.ACTIVITY_SERVICE);

para (servicio RunningServiceInfo:manager.getRunningServices(Integer.MAX_VALUE))

{

2.

{

if("so .xxxx.WidgetUpdateService".equals(service.service.getClassName()))

//Nombre de clase de servicio

{ isServiceRunning = true }

}

if (!isServiceRunning) {

Intent i = new Intent(context, WidgetUpdateService.class);

context.startService(i);

}

Acerca del inicio del servicio.

El método de implementación es similar al método anterior. También inicia el Servicio monitoreando la transmisión del sistema al inicio. Pero, de hecho, después de completar la verificación anterior, no se iniciará al inicio porque el Servicio lo hará. El programa anterior lo iniciará después de dos minutos. El código es el siguiente:

if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))

{

Intent i = new Intent(contexto , LogService.clase);

contexto.startService(i

}

;