Detectar bloqueo de servicio
Tengo un servicio, con onStartCommand()
similar a esto:
private User user; @Override public int onStartCommand(@Nullable final Intent intent, final int flags, final int startId) { if (user == null) { user = UserList.getInstance().getSpecialUser(); } Assert.assertNotNull(user); // // Build notification here, seomehow based on user object // startForeground(42, notification); return START_STICKY; }
Obviamente, quiero que mi servicio se ejecute en primer plano, y correr por el mayor tiempo posible.
- PeekService () devuelve null aunque el servicio se está ejecutando, si el servicio es reiniciado por el sistema después de matar OOM
- ¿Cuándo se destruye un servicio iniciado y enlazado?
- Antecedentes El servicio se mata en android
- La escritura concurrente a la base de datos android (de múltiples servicios)?
- Android: startActivityForResult no llamando aActivityResult
Esto funciona bien, hasta que mi aplicación se bloquea en alguna parte en sus clases de red. Cuando sucede entonces, se muestra el cuadro de diálogo de bloqueo de la aplicación, el usuario lo confirma, toda la aplicación se vuelve a crear, también el servicio se vuelve a crear, pero UserList
está vacía, por lo que getSpecialUser()
devuelve null
y Assert
crasehs la aplicación. Android se da por vencido y el usuario termina en la pantalla de inicio.
¿Hay una manera de detectar el accidente que me permitirá manejar la situación con más gracia?
- Androide broadcastreceiver vs oyentes
- Establecer un Listener en una clase basada en servicio
- Cómo ejecutar CountDownTimer en un servicio en Android?
- Administrador de alarmas programado no funciona Android
- Pasando objeto personalizado al servicio android en diferentes procesos
- El proceso del servicio se cancela después de que la aplicación se elimina de la bandeja de aplicaciones
- ¿Por qué se reinicia mi servicio de Android cuando se cancela el proceso, aunque utilicé START_NOT_STICKY?
- Descargar varios archivos con una barra de progreso en ListView Android
Crear una excepción de excepciónHandler en su aplicación
public class MyApplication extends android.app.Application{ @Override public void onCreate() { super.onCreate(); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread arg0, Throwable arg1) { doSomething(); } }); } }
- Argumentos de la línea de comandos a la prueba de instrumento Android usando gradle
- Cómo crear piezas de rompecabezas sin usar máscara?