pie - ¿Cómo manejar el código cuando la aplicación se destruye deslizando en Android?
android versiones (6)
Si mi aplicación se está ejecutando y presiono el botón de inicio, la aplicación se pone en segundo plano. Ahora si al presionar el botón de inicio y matar la aplicación al deslizarlo desde la lista de aplicaciones recientes, no se llama a ninguno de los eventos como onPause()
, onStop()
o onDestroy()
sino que el proceso finaliza. Entonces, si quiero que mis servicios se detengan, elimine las notificaciones y anule el registro de los oyentes, ¿cómo puedo hacer eso? Leí bastantes artículos y blogs, pero no obtuve ninguna información útil y no encontré documentación al respecto. Cualquier ayuda sería apreciada. Gracias por adelantado.
Acabo de resolver un tipo similar de problema.
Esto es lo que puede hacer si solo se trata de detener el servicio cuando se elimina la aplicación al deslizar desde la lista de aplicaciones Recientes.
Dentro de su archivo Manifiesto, mantenga stopWithTask
como true
para el Servicio. Me gusta:
<service
android:name="com.myapp.MyService"
android:stopWithTask="true" />
Pero como dices que quieres anular el registro de oyentes y detener la notificación, etc., sugeriría este enfoque:
Dentro de su archivo Manifiesto, mantenga la
stopWithTask
comofalse
para el Servicio. Me gusta:<service android:name="com.myapp.MyService" android:stopWithTask="false" />
Ahora, en su servicio
MyService
, anule el métodoonTaskRemoved
. (Esto se disparará solo sistopWithTask
está configurado enfalse
).public void onTaskRemoved(Intent rootIntent) { //unregister listeners //do any other cleanup if required //stop service stopSelf(); }
Consulte mi pregunta para obtener más detalles, que también contiene otra parte del código.
Espero que esto ayude.
Cuando presionas home - onPause
y onStop
de tu Activity se llama, entonces en este momento tienes que hacer todos los ahorros y la limpieza, porque la plataforma Android no garantiza que onDestroy
o cualquier otro método de ciclo de vida sea invocado, entonces el proceso podría ser asesinado sin ninguna notificación.
Encontré una forma de hacer esto
hacer un servicio como este
public class OnClearFromRecentService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("ClearFromRecentService", "Service Started");
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("ClearFromRecentService", "Service Destroyed");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.e("ClearFromRecentService", "END");
//Code here
stopSelf();
}
}
2) registrar este servicio en manifest.xml
<service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" />
3) A continuación, inicie este servicio en su actividad de salpicadura
startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
Y ahora cuando borre su aplicación de Android reciente, entonces se ejecutará este método enTaskRemoved ().
No puede manejar el deslizamiento, porque el sistema simplemente elimina su proceso de la memoria sin llamar a ninguna devolución de llamada.
He comprobado que antes de que el usuario llame a la pantalla de "aplicaciones recientes", siempre se llamará a OnPause (). Por lo tanto, debe guardar todos los datos en el método onPause sin verificar isFinishing ().
Para comprobar el botón Atrás, use el método OnBackPressed.
Resolví un problema similar. Si desea después de deslizar desde la tarea reciente y en el siguiente inicio para que se comporte correctamente, siga los pasos a continuación:
1) Guardar ID de proceso en preferencia compartida:
SharedPreferencesUtils.getInstance().putInt(SharedPreferencesUtils.APP_PROCESS_ID, android.os.Process.myPid());
2) Cuando la aplicación se inicia desde el iniciador después de borrar de una tarea reciente, hazlo:
int previousProcessID = mSharedPreferencesUtils.getInt(SharedPreferencesUtils.APP_PROCESS_ID);
int currentProcessID = android.os.Process.myPid();
if ((previousProcessID == currentProcessID)) {
// This ensures application not killed yet either by clearing recent or anyway
} else {
// This ensures application killed either by clearing recent or by anyother means
}
onPause()
guardar sus datos cuando se llama onPause()
. Mira este diagrama del ciclo de vida: Desarrollador de Android
Puede ver que una aplicación puede ser eliminada después de onPause()
o onStop()
.
Maneje sus datos allí y recupérelos en onRestart()
/ onCreate()
.
¡buena suerte!