Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How long is the "JobService execution time limit" mentioned in Android's JobIntentService docs?

While converting an app to be ready for Android Oreo, I read the docs on JobIntentService over here.

In there I find (important part emphasised):

When running as a pre-O service, the normal service execution semantics apply: [...] When running as a Job, the typical JobService execution time limit will apply, after which the job will be stopped (cleanly, not by killing the process) and rescheduled to continue its execution later.

If I look at the documented limitations there is no word about any execution time limits. Also JobScheduler does not mention anything.

  • Is this a time limit I should simply not be concerned about?
  • Is it undocumented?
  • Or is the execution time limit not/no longer existing?
  • Or will I have to redesign my services in a way that they can be interrupted and restarted at any given point in time? Best practices?
like image 804
Krumelur Avatar asked Feb 05 '18 20:02

Krumelur


People also ask

What is JobIntentService in Android?

You can say JobIntentService is a modern way to run the background service from the background application. JobIntentService. JobIntentService works in the same way as a Service however it enqueues the work into the JobScheduler on compatible Android targets( SDK 26 or more).

Is JobIntentService deprecated?

This class is deprecated. This class has been deprecated in favor of the Android Jetpack WorkManagerlibrary, which makes it easy to schedule deferrable, asynchronous tasks that are expected to run even if the app exits or the device restarts.


2 Answers

How long is the “JobService execution time limit” mentioned in Android's JobIntentService docs?

In practice, it seems to be 10 minutes. I originally determined that by testing, but IIRC somebody pointed out the limit in the source code.

Is this a time limit I should simply not be concerned about?

If you are really sure that your work will be done in less time, yes, at least for the time being.

Is it undocumented?

Yes.

Or is the execution time limit not/no longer existing?

It existed the last time I tested it.

Or will I have to redesign my services in a way that they can be interrupted and restarted at any given point in time?

Well, ideally, yes, particularly if you are using any constraints beyond time. For example, if you say that your job requires a network connection, and the device loses connectivity, your job will be stopped. That could occur well before the 10-minute time period elapses.

Best practices?

Avoid periodic background work to the greatest extent possible.

like image 113
CommonsWare Avatar answered Oct 18 '22 20:10

CommonsWare


In order to avoid execution time limit i use bellow practice it solve my problem.

@Override
    public void onDestroy() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && isStopped()) {
           //do nothing
        } else {
            super.onDestroy();
           //on destroy called
        }
    }

    @Override
    public boolean onStopCurrentWork() {
        return false;
    }
like image 1
Adnan Yousaf Avatar answered Oct 18 '22 21:10

Adnan Yousaf