I'm having trouble figuring out how to use Android's Workmanager. Essentially, I want to make a OneTime request with a time delay, determine success, then do some stuff. The Worker class does NOTHING.
What I'm expecting is a SUCCESS code to be returned after the time delay. That is, the sole purpose of my Workmanager code is to provide a delay.
I know there are many other ways to effect a delay but my understanding is that Android "protects" Workmanager Workers better than, say, AlarmManager.
Unfortunately, I can't make it happen.
Here's what I've done
- Extended my activity to include LifecycleOwner
Added the required getLifeCycle method, as below
@NonNull @Override public Lifecycle getLifecycle() { Log.d (TAG, "getLifecycle(): " + getLifecycle()); return getLifecycle(); }
Here's the Worker class
public class makeAlarm extends Worker { public makeAlarm( @NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @Override public Result doWork() { // Do the work here--in this case, do nothing // Indicate whether the task finished successfully with the Result return Result.success(); } }
And here's my action code
// Create a OneTimeWorkRequest that delays "success" by the required time OneTimeWorkRequest makeAlarmWorkRequest = new OneTimeWorkRequest.Builder(makeAlarm.class) .setInitialDelay(120, TimeUnit.SECONDS) .build(); WorkManager.getInstance(this).enqueue(makeAlarmWorkRequest); // The following stmt. shows what appears to be a valid id Log.d (TAG, "makeAlarmWorkRequest.getId(): " + makeAlarmWorkRequest.getId()); WorkManager.getInstance(this).getWorkInfoByIdLiveData(makeAlarmWorkRequest.getId()) .observe(myLifecycleOwner, new Observer<WorkInfo>() { @Override public void onChanged(@Nullable WorkInfo workInfo) { if (workInfo != null && workInfo.getState() == WorkInfo.State.SUCCEEDED) { // Some amazing work here... } } });
I've tried a number of variations but haven't had success. The above code results in a stack overflow crash. Help!