since android o not allow background services run, did choose different approach run new thread in background using firebase jobscheduler, see: https://github.com/firebase/firebase-jobdispatcher-android
at moment, start background thread in service. sticky service, , restart if user closes app recents (when slide remove app running apps).
public class notificationservice extends service { @override public void oncreate() { // start thread applicationloader.postinitapplication(); } @override public int onstartcommand(intent intent, int flags, int startid) { return start_sticky; } @override public ibinder onbind(intent intent) { return null; }
since android o not allow service started in background, implemented jobdispatcher. works fine, problem is:
how can restart job when app closed recents?
starting job:
firebasejobdispatcher dispatcher = new firebasejobdispatcher (new googleplaydriver(applicationcontext)); job notificationjob = dispatcher.newjobbuilder() .setservice(notificationservice.class) .settag("backgroundjob") .setrecurring(false) .setlifetime(lifetime.until_next_boot) .settrigger(trigger.now) .build(); dispatcher.mustschedule(notificationjob);
the service:
public class notificationservice extends jobservice { @override public boolean onstartjob(jobparameters job) { // check if thread started, if not start thread applicationloader.initnotificationthread(); return false; } @override public boolean onstopjob(jobparameters job) { return false; }
one workaround problem make job recurring using .setrecurring(true)
, , set .settrigger
1 minute. job can check if thread running already, , if not start thread. keeps working, if user removes app recents.
however, solution feels uncomfortable start check each time while isn't needed.
is there better way solve this?
Comments
Post a Comment