Creación de un servicio de fondo en Android

En mi proyecto necesito crear un servicio en android. Puedo registrar el servicio como esto:

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <service android:enabled="true" android:name=".ServiceTemplate"/> <activity android:name=".SampleServiceActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Estoy llamando a este servicio dentro de una actividad como a continuación: –

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent service = new Intent(getApplicationContext(), ServiceTemplate.class); this.startService(service); } 

Pero si mato la actividad actual, el servicio también se destruye. Necesito este servicio siempre funcionando en segundo plano. ¿Lo que necesito hacer? ¿Cómo puedo registrar el servicio? ¿Cómo inicio el servicio?

Aquí hay una forma semi-diferente de mantener el servicio para siempre. Hay maneras de matarlo en código si lo desea

Servicio de fondo:

 package com.ex.ample; import android.app.Service; import android.content.*; import android.os.*; import android.widget.Toast; public class BackgroundService extends Service { public Context context = this; public Handler handler = null; public static Runnable runnable = null; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "Service created!", Toast.LENGTH_LONG).show(); handler = new Handler(); runnable = new Runnable() { public void run() { Toast.makeText(context, "Service is still running", Toast.LENGTH_LONG).show(); handler.postDelayed(runnable, 10000); } }; handler.postDelayed(runnable, 15000); } @Override public void onDestroy() { /* IF YOU WANT THIS SERVICE KILLED WITH THE APP THEN UNCOMMENT THE FOLLOWING LINE */ //handler.removeCallbacks(runnable); Toast.makeText(this, "Service stopped", Toast.LENGTH_LONG).show(); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "Service started by user.", Toast.LENGTH_LONG).show(); } } 

Aquí es cómo iniciarlo desde su actividad principal o donde quiera:

 startService(new Intent(this, BackgroundService.class)); 

onDestroy() se llamará cuando la aplicación se cierra o muere, pero el runnable sólo lo inicia de nuevo. También debe eliminar las devoluciones de llamada del manejador.

Espero que esto ayude a alguien.

La razón por la que algunas personas hacen esto es debido a las aplicaciones corporativas donde en algunos casos los usuarios / empleados no deben ser capaces de detener ciertas cosas 🙂

http://i.imgur.com/1vCnYJW.png

Pero si matan la actividad actual el servicio también está matando. Necesito este servicio siempre funcionando en segundo plano. ¿Lo que necesito hacer?

Si por "matar a la actividad actual" significa que está usando un asesino de tareas, o Force Stop desde la aplicación Configuración, su servicio se detendrá. No hay nada que puedas hacer al respecto. El usuario ha indicado que no desea que su aplicación se ejecute más; Respete los deseos del usuario.

Si por "matar la actividad actual" quiere decir que presionó BACK o HOME o algo así, entonces el servicio debería seguir funcionando, al menos por un tiempo, a menos que llame a stopService() . No seguirá funcionando para siempre – Android finalmente se deshará del servicio, porque muchos desarrolladores escriben servicios que tratan de estar "siempre funcionando en segundo plano". Y. Por supuesto, el usuario puede matar el servicio siempre que el usuario lo desee.

Un servicio sólo debe estar "funcionando" cuando está entregando activamente valor al usuario . Esto generalmente significa que el servicio no debe estar "siempre funcionando en segundo plano". En su lugar, utilice AlarmManager y un IntentService para realizar trabajos de forma periódica.

Intente iniciar el servicio en un hilo independiente, de modo que cuando destruya su actividad, el servicio no se vea afectado. Se ejecutará sin ninguna interrupción. Además, en el servicio devuelven onStartCommand(intent, flags, startId) desde onStartCommand(intent, flags, startId) para asegurarse de que el servicio se vuelve a crear si el sistema lo onStartCommand(intent, flags, startId) (sistema operativo Android).

Anule este método:

 public int onStartCommand(Intent intent, int flags, int startId) { return Service.START_STICKY; } 
  • Cómo enviar el mensaje del servicio a la actividad
  • Servicio de intención nunca se llama
  • ¿Cómo se restablece el servicio de WhatsApp incluso si debo detener la aplicación?
  • Vista web de Android dentro de un servicio?
  • Cómo forzar el onServiceDisconnected () obtener llamado?
  • La mejor manera de enviar actualizaciones de ubicación de usuario al servidor en segundo plano (Android)
  • ¿Debería un MediaPlayer ejecutarse en hilos separados?
  • Vinculación / desvinculación a un servicio en una aplicación
  • Bluetooth -> fallo en el descubrimiento del servicio
  • ServiceConnection :: onServiceConnected no se llama aunque Context :: bindService devuelve true?
  • Mantenga el servicio en funcionamiento incluso si el teléfono está apagado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.