In android 4.4, swiping app out of recent tasks permanently kills application with its service . Any idea why?

后端 未结 2 729
滥情空心
滥情空心 2020-11-30 04:30

Unlike previous versions, in 4.4, swiping app out of recent tasks permanently kills app along with its service(like force-stop) even though it\'s running background services

相关标签:
2条回答
  • 2020-11-30 04:41

    Got it. Its a bug in 4.4. I tried this and it worked perfectly fine(its a dirty workout though).

    Just override this method -:

    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);
    }
    
    0 讨论(0)
  • 2020-11-30 04:49

    From this issue Foreground service killed when receiving broadcast after acitivty swiped away in task list

    Here is the solution

    In the foreground service:

    @Override
    public void onTaskRemoved( Intent rootIntent ) {
       Intent intent = new Intent( this, DummyActivity.class );
       intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
       startActivity( intent );
    }
    

    In the manifest:

    <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"
    /> 
    

    In DummyActivity.java:

    public class DummyActivity extends Activity {
        @Override
        public void onCreate( Bundle icicle ) {
            super.onCreate( icicle );
            finish();
        }
    }
    
    0 讨论(0)
提交回复
热议问题