Android workmanager scheduled worker lost after task killed

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



Android workmanager scheduled worker lost after task killed



I'm trying to make a worker-run every 15 minutes using the new WorkManager API, 1.0.0-alpha06.
If I'm not wrong, using work manager with PeriodicWorkRequest should make the worker outlive task kills and phone reboots, but when I swipe the task from the Recent Apps the scheduled worker is lost (I've waited for around 45 minutes to see any logs of the worker scheduled for 15 minutes interval).



these are my files:



MyExampleWorker.java:


public class MyExampleWorker extends Worker
public static final String TAG = "MY_EXAMPLE_WORKER";

@NonNull
@Override
public Result doWork()
Log.i(TAG, "Starting background worker");
// Getting configuration data
long param1 = getInputData().getLong("param1", 60000);
String param2 = getInputData().getString("param2");
String param3 = getInputData().getString("param3");

PackageManager pckMgr = mContext.getPackageManager();
...
..
.
return Result.SUCCESS;





Main.java:
this method fires as soon as the app is launched


@ReactMethod
public void execute()
Log.i(TAG, "inside execute, setting up periodic worker in workManager");

Data inputData = new Data.Builder()
.putLong("param1", 60000)
.putString("param2", "something")
.putString("param3", "something else")
.build();

PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest
.Builder(MyExampleWorker.class, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
.setInputData(inputData)
.addTag(MyExampleWorker.TAG)
.build();

WorkManager.getInstance().enqueueUniquePeriodicWork(MyExampleWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);



UPDATE:
not only that, but if I open the app once again I see the log for "inside execute, setting up a periodic worker in workManager" but seems the worker is not scheduled, it been over an hour and no logs for the worker are present in logcat.



Am I missing something here?



Any help is GREATLY appreciated!!



Diego





on which android device you are testing ?, whats compileSdk version ?
– kdblue
Aug 13 at 4:52






Can you resolve task id by TAG after app restart?
– Ufkoku
Aug 13 at 14:06





Sorry for the delays guys, I've been really busy with a alpha release. @kdblue its compileSdkVersion es 27, also its been tested on emulator running android API 27.
– Dieguinho
Aug 21 at 1:09





@Ufkoku not sure how I would go about doing that...
– Dieguinho
Aug 21 at 1:09





@Dieguinho I am not sure WorkManager requires compileSdk version 28 or higher. i read here google official page - developer.android.com/topic/libraries/architecture/…
– kdblue
Aug 21 at 3:14



WorkManager requires compileSdk version 28 or higher




1 Answer
1



This is the problem caused by Battery Optimization and/or Doze mode, occurs especially when you are using Chinese Rom like Oxygen OS, MIUI etc.



Test your app on Stock Rom's, this will work perfectly fine. There would be no issues at all. This is because these Chinese ROM enable their custom power saving techniques that prevent any background services from running.



Two things you can do:



You can ask programmatically


Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager)
context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName))
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));

context.startActivity(intent);



And in your manifest


<uses-permission
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>



This way you can whitelist your app and work manager will work, but unfortunately, Google will remove your app from their play store if you request the above permission. No one knows why!!!



Read this article on Google's Anti Trust Issues



startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);


startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);





this is not the case, I'm testing it on android emulator API version 27. The device does not enter Doze mode, I just kill the app from the Recent Apps menu and sometimes the task is lost, sometimes it isn't
– Dieguinho
Aug 21 at 1:11






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

make 2 or more post in bootsrap

Store custom data using WC_Cart add_to_cart() method in Woocommerce 3

Firebase Auth - with Email and Password - Check user already registered