I have a requirement where I need to notify inactive users (who have not opened the app for 7 days). This means the notification must be sent if the app is in background for 7 days or the app has been killed and not used for 7 days.
I followed an algorithm using AlarmManager
similar to this answer but the notifications are not sent if the app gets killed. I tried to integrate BroadcastReceiver
as shown below but it creates an infinite loop when I call it from OnDestroy()
of CheckRecentRun
class (because it destroys itself periodically). Also, as I learnt from this answer, onDestroy() does not always get called when app is killed.
public class TimerRestarterBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TimerRestarterBroadcastReceiver.class.getSimpleName(), "Service has stopped");
context.startService(new Intent(context, CheckRecentRun.class));
}
}
Is there any simpler and effective way to do this?
Possible scenario using WorkManager: