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: –
- Puede un servicio de Android proporcionar dos interfaces para comunicarse con?
- ¿Ya está funcionando el servicio Android?
- Android.os.NetworkOnMainThreadException en el inicio del servicio en android
- Servicio Android no lanzado por JUnit test
- ¿Cuándo iniciar y detener el servicio de facturación en la aplicació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?
- Servicio de Android mantener vivo
- ¿Es un servicio de Android un proceso o hilo?
- Android: `java.lang.IllegalArgumentException: Servicio no registrado` cuando se llama onStop ()
- Cómo autenticar servicio web sap con ksoap2
- En la aplicación de facturación V3 Service nullpointer Android
- Android - ¿Utilizando el método de un servicio en una actividad?
- ¿Cómo descargar el archivo con el servicio en android?
- Servicio y un BroadCastReceiver
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 🙂
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; }
- Android, obteniendo la señal de intensidad (PhoneStateListener) mientras el dispositivo está en modo de suspensión
- ¿Cómo obtener una vista más grande que su padre?