segundos - En Android 4.4, deslizar la aplicación fuera de las tareas recientes mata de forma definitiva a la aplicación con su servicio. ¿Alguna idea de por qué?
no puedo adelantar videos de youtube android (2)
De este problema, el servicio de primer plano murió al recibir la transmisión después de que la actividad desapareció de la lista de tareas
Aquí está la solución
En el servicio de primer plano:
@Override
public void onTaskRemoved( Intent rootIntent ) {
Intent intent = new Intent( this, DummyActivity.class );
intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity( intent );
}
En el manifiesto:
<activity
android:name=".DummyActivity"
android:theme="@android:style/Theme.NoDisplay"
android:enabled="true"
android:allowTaskReparenting="true"
android:noHistory="true"
android:excludeFromRecents="true"
android:alwaysRetainTaskState="false"
android:stateNotNeeded="true"
android:clearTaskOnLaunch="true"
android:finishOnTaskLaunch="true"
/>
En DummyActivity.java:
public class DummyActivity extends Activity {
@Override
public void onCreate( Bundle icicle ) {
super.onCreate( icicle );
finish();
}
}
A diferencia de las versiones anteriores, en 4.4, al deslizar la aplicación fuera de tareas recientes mata permanentemente la aplicación junto con su servicio (como forzar-parar) aunque esté ejecutando servicios en segundo plano. Muestra 0 procesos 1 de servicio pero el servicio tampoco funciona. Idealmente, no debería matar el servicio en segundo plano, y no en las versiones anteriores a 4.3. ¿Alguna idea de por qué está sucediendo en 4.4?
Lo tengo. Es un error en 4.4. Intenté esto y funcionó perfectamente bien (aunque es un entrenamiento sucio).
Simplemente anule este método:
public void onTaskRemoved(Intent rootIntent) {
Log.e("FLAGX : ", ServiceInfo.FLAG_STOP_WITH_TASK + "");
Intent restartServiceIntent = new Intent(getApplicationContext(),
this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent = PendingIntent.getService(
getApplicationContext(), 1, restartServiceIntent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext()
.getSystemService(Context.ALARM_SERVICE);
alarmService.set(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
super.onTaskRemoved(rootIntent);
}