1

当应用程序更新时,我的设备(模拟器和真实设备)上的定期作业数量似乎不断增加。我是使用 Android Studio 安装还是先创建一个签名的 APK 然后通过 adb (adb install -r name.apk) 更新都没有关系。

使用命令“adb shell dumpsys jobscheduler”会产生以下结果:

Registered jobs:
  108..:[ComponentInfo{com.google.android.apps.maps/com.google.android.apps.gmm.offline.OfflineAutoUpdateJobService},jId=2131624035,u0,R=(23:32:44,47:32:44),N=1,C=true,I=true,F=0,P=true,ANI=true]
  148..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=61,u0,R=(07:54,17:54),N=0,C=false,I=false,F=0,P=false,ANI=true]
  160..:[ComponentInfo{android/com.android.server.backup.FullBackupJob},jId=20536,u0,R=(none,none),N=2,C=true,I=true,F=0,P=false,ANI=true]
  192..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=50,u0,R=(1:30:00,1:40:00),N=0,C=false,I=false,F=0,P=false,ANI=true]
  206..:[ComponentInfo{android/com.android.server.os.BackgroundCompactionService},jId=802,u0,R=(50:21,none),N=0,C=false,I=true,F=0,P=false,ANI=true]
  215..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=60,u0,R=(37:54,47:54),N=0,C=false,I=false,F=0,P=false,ANI=true]
  262..:[ComponentInfo{com.android.providers.downloads/com.android.providers.downloads.DownloadIdleService},jId=1,u0,R=(-20:38,3:25:13),N=0,C=true,I=true,F=0,P=true,ANI=true]
  291..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=9,u0,R=(12:47,22:47),N=0,C=false,I=false,F=0,P=false,ANI=true]
  312..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=37,u0,R=(12:57,22:57),N=0,C=false,I=false,F=0,P=false,ANI=true]
  456..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=38,u0,R=(1:22:56,1:32:56),N=0,C=false,I=false,F=0,P=true,ANI=true]
  540..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=39,u0,R=(22:46,32:46),N=0,C=false,I=false,F=0,P=true,ANI=true]
  577..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=57,u0,R=(03:34,13:34),N=0,C=false,I=false,F=0,P=false,ANI=true]
  639..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=8,u0,R=(22:47,32:47),N=0,C=false,I=false,F=0,P=true,ANI=true]
  663..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=56,u0,R=(33:34,43:34),N=0,C=false,I=false,F=0,P=false,ANI=true]
  862..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=43,u0,R=(23:11,33:11),N=0,C=false,I=false,F=0,P=true,ANI=true]
  864..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=32,u0,R=(22:56,32:56),N=0,C=false,I=false,F=0,P=true,ANI=true]
  984..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=42,u0,R=(1:22:46,1:32:46),N=0,C=false,I=false,F=0,P=true,ANI=true]
  102..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=49,u0,R=(00:00,10:00),N=0,C=false,I=false,F=0,P=false,ANI=true]
  104..:[ComponentInfo{android/com.android.server.pm.BackgroundDexOptService},jId=800,u0,R=(-20:38,none),N=0,C=true,I=true,F=0,P=false,ANI=true]
  114..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=44,u0,R=(23:11,33:11),N=0,C=false,I=false,F=0,P=true,ANI=true]
  124..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=53,u0,R=(19:50,29:50),N=0,C=false,I=false,F=0,P=false,ANI=true]
  124..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=33,u0,R=(12:57,22:57),N=0,C=false,I=false,F=0,P=false,ANI=true]
  126..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=62,u0,R=(1:37:54,1:47:54),N=0,C=false,I=false,F=0,P=false,ANI=true]
  130..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=41,u0,R=(12:47,22:47),N=0,C=false,I=false,F=0,P=false,ANI=true]
  131..:[ComponentInfo{android/com.android.server.backup.KeyValueBackupJob},jId=20537,u0,R=(3:42:43,23:39:25),N=1,C=true,I=false,F=0,P=false,ANI=true]
  161..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=51,u0,R=(29:50,39:50),N=0,C=false,I=false,F=0,P=false,ANI=true]
  162..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=36,u0,R=(22:56,32:56),N=0,C=false,I=false,F=0,P=true,ANI=true]
  165..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=52,u0,R=(29:50,39:50),N=0,C=false,I=false,F=0,P=false,ANI=true]
  170..:[ComponentInfo{com.google.android.apps.maps/com.google.android.apps.gmm.offline.OfflineAutoUpdateJobService},jId=2131624034,u0,R=(17:39:42,18:09:42),N=1,C=true,I=true,F=0,P=true,ANI=true]
  171..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=54,u0,R=(1:29:50,1:39:50),N=0,C=false,I=false,F=0,P=false,ANI=true]
  175..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=47,u0,R=(30:00,40:00),N=0,C=false,I=false,F=0,P=false,ANI=true]
  197..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=58,u0,R=(1:33:34,1:43:34),N=0,C=false,I=false,F=0,P=false,ANI=true]
  208..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=34,u0,R=(1:22:56,1:32:56),N=0,C=false,I=false,F=0,P=true,ANI=true]
  209..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=10,u0,R=(1:22:57,1:32:57),N=0,C=false,I=false,F=0,P=true,ANI=true]
  213..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=48,u0,R=(30:00,40:00),N=0,C=false,I=false,F=0,P=false,ANI=true]
  215..:[ComponentInfo{android/com.android.server.MountServiceIdler},jId=808,u0,R=(17:09:17,none),N=0,C=true,I=true,F=0,P=false,ANI=true]
  218..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=55,u0,R=(33:34,43:34),N=0,C=false,I=false,F=0,P=false,ANI=true]
  225..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=31,u0,R=(22:57,32:57),N=0,C=false,I=false,F=0,P=true,ANI=true]
  242..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=35,u0,R=(22:57,32:57),N=0,C=false,I=false,F=0,P=true,ANI=true]
  252..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=40,u0,R=(22:46,32:46),N=0,C=false,I=false,F=0,P=true,ANI=true]
  255..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=59,u0,R=(37:54,47:54),N=0,C=false,I=false,F=0,P=false,ANI=true]
  258..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=45,u0,R=(19:50,29:50),N=0,C=false,I=false,F=0,P=false,ANI=true]
  266..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=46,u0,R=(1:23:11,1:33:11),N=0,C=false,I=false,F=0,P=true,ANI=true]
  268..:[ComponentInfo{my.app/com.evernote.android.job.v21.PlatformJobService},jId=7,u0,R=(22:47,32:47),N=0,C=false,I=false,F=0,P=true,ANI=true]

而且我在启动应用程序时只安排了 4 个不同的作业(在“MyApp extends Application”类的实例中启动。

另外:即使我指定定期作业不应该在重新启动之间持续存在,重新启动后作业仍然存在。(是的,我的<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />清单中有'')

这是我如何安排定期作业的示例:

public static void schedulePeriodicJob() {
        int jobId = new JobRequest.Builder(TSMUSyncJob.TAG_TSMU_SYNC_PERIODIC_JOB)
                .setPeriodic(TimeUnit.MINUTES.toMillis(120), TimeUnit.MINUTES.toMillis(10))
                //.setPersisted(true)
                .build()
                .schedule();
        Log.i(TAG, "Persisted job scheduled to run every 120 minutes with 10 minutes flex. Job id: " + String.valueOf(jobId));
    }

有任何想法吗?谢谢, 欧维

4

1 回答 1

5

永久定期作业将永久保留。每次您安排它们时,即使使用相同的标签,也会创建一个新的作业请求。为了防止这种情况发生setUpdateCurrent(true),请调用JobRequest.Builder

JobRequest.Builder(TSMUSyncJob.TAG_TSMU_SYNC_PERIODIC_JOB)
    .setPeriodic(TimeUnit.MINUTES.toMillis(120), TimeUnit.MINUTES.toMillis(10))
    .setUpdateCurrent(true)
    .setPersisted(true)
    .build()
    .schedule()

setUpdateCurrent(true)在创建新的作业请求之前取消所有现有的作业请求。如果应该保留旧的作业请求而不创建新的作业请求,请在调度之前检查是否已经存在具有相同标签的作业请求:

if (jobManager.getAllJobRequestsForTag(TAG_TSMU_SYNC_PERIODIC_JOB).isEmpty()) {
     new JobRequest.Builder(...).schedule();
}
于 2017-05-08T08:28:44.283 回答