Cómo mantener los servicios de Android siempre ejecutándose en segundo plano
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())) p>
//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
}
;