Service not restarting using START_STICKY on devices above API Level 25(Nougat)
Asked Answered
E

2

2

I have got a service in my app which needs to be restarted after app removed from recent task list. Service restarts for API level 25 and below but not for 25 and above versions.Please help me with this issue and would like to know the best way to restart a service which is compatible to all OS versions.

public class XMPPMainService extends Service {

    private static final String TAG = "XMPPMainService";

    private static final int RECONNECT_TRY_INTERVAL_MS = 900; // 5 Seconds

    private PendingIntent pendingIntent;


    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG, " onCreate ");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Logger.LOGD(TAG, "onDestroy: ");
        XMPPManager.shutdown();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        XMPPManager.getInstance(getApplicationContext());
        return START_STICKY;
    }
}

Manifest file:

<service
        android:name="com.chatmodule.xmpp.XMPPMainService"
        android:enabled="true"
        android:stopWithTask="false"
        android:exported="false" />`
Estuary answered 27/7, 2017 at 10:17 Comment(0)
G
5

Add this code in your service class:-

@Override
public void onTaskRemoved(Intent rootIntent){
    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);
}
Germ answered 5/8, 2017 at 8:57 Comment(0)
N
0

On Android Studio Hedgehog 2023.1.1 Patch 2 sticky services don't restart too if you launch your app with the debugger due to a bug in it. Tested on Android 12.

Nanine answered 31/3 at 19:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.