×

深圳网站建设—APP开发—网站制作—小程序开发_博纳网络公司

0755 -
82538016
82560826
网站制作资讯

开发APP关于JobScheduler的替代解决方案

文章编辑:网站建设 文章来源:APP开发 浏览量:

  开发APP关于JobScheduler的替代解决方案,深圳APP开发公司前面提到,使用JobScheduler时即使执行任务的条件不满足,任务也会被执行。为了规避这个缺陷,可以使用Evernote来代替JobScheduler。以下是具体的实现方式。在build.gradle文件中增加依赖库,代码如下:
dependencies {    …     compile  ' com. evernote: android- job: 1. 1. 8 ' }
从库提供的类派生几个类,代码如下:
public class DemoJobCreator implements JobCreator {    @ Override     public Job create( String tag) {         switch (tag) {             case DemoSyncJob. TAG:                 return new DemoSyncJob();             default:                 return null;        }    } } public class DemoSyncJob extends Job {     public static final String TAG = "job_ demo_ tag";    @ Override    @ NonNull     protected Result onRunJob( final Params params) {             if (params. isPeriodic()) {             PendingIntent pendingIntent = PendingIntent. getActivity(
getActivity( getContext(), 0, new Intent (getContext(), MainActivity. class), 0);             Notification notification = new NotificationCompat. Builder (getContext())                    . setContentTitle(" Job Demo")                    . setContentText(" Periodic job run")                    . setAutoCancel( true)                    . setContentIntent( pendingIntent)                    . setSmallIcon( R. drawable. ic_ notifications_ black_ 24dp)                    . setShowWhen( true)                    . setColor( Color. GREEN)                    . setLocalOnly( true)                    . build();             NotificationManagerCompat. from( getContext()). notify( new Random(). nextInt(), notification);             EamLog. v(" job", "isPeriodic== true");        } else {             EamLog. v(" job", "isPeriodic== false");        }         return Result. SUCCESS;    }}
在Application类中创建类的实例,代码如下:
public class EamApplication extends Application {     private static Context sContext;    @ Override     public void onCreate() {         super. onCreate();        …               JobManager. create( this). addJobCreator( new DemoJobCreator());    } } //Job 的 任务 Id private int mLastJobId; private JobManager mJobManager; //初始化 JobManager 对象 public void initVariables() {    …     mJobManager = JobManager. instance();
} //设置 执行 此 任务 需 满足 的 条件、 间隔 时间 和 关机 重 启 后 是否 继续 执行 public static void scheduleJob(){     mLastJobId = new JobRequest. Builder( DemoSyncJob. TAG)            . setRequiredNetworkType( JobRequest. NetworkType. CONNECTED)            . setRequiresDeviceIdle( true)            . setRequiresCharging( true)            . setPeriodic( JobRequest. MIN_ INTERVAL)            . setPersisted( true)            // 设置 只有 此 任务 的 执行 条件 被 满足 时, 才 执行 此 任务            . setRequirementsEnforced( true)            . build()            . schedule(); } //取消 Job private void cancelJob(){     mJobManager. cancelAll(); }
Evernote库提供了setRequirementsEnforced方法,让使用者
使用者设置是否只有任务执行的条件都满足了,系统才执行任务。在Android7.0中,Job循环执行时最小的间隔时间是15分钟,为了兼容Android7.0,Evernote库的任务循环执行的最小间隔时间也是15分钟。在Evernote提供的源码(JobRequest.java)中,可以看到如下说明。/** * The minimum interval of a periodic job. Specifying a smaller interval will result in an exception.  * This limit comes from the {@code JobScheduler} starting with Android Nougat. */ public static final long MIN_ INTERVAL = TimeUnit. MINUTES. toMillis( 15);
使用这个库时,在混淆文件中要增加如下代码。
-dontwarn com. evernote. android. job. gcm.** -dontwarn com. evernote. android. job. util. GcmAvailableHelper
-keep public class com. evernote. android. job. v21. PlatformJobService -keep public class com. evernote. android. job. v14. PlatformAlarmService -keep public class com. evernote. android. job. v14. PlatformAlarmReceiver -keep public class com. evernote. android. job. JobBootReceiver -keep public class com. evernote. android. job. JobRescheduleService
好了,APP开发公司本文关于“JobScheduler的替代解决方案
”知识与代码分享就到这里,谢谢关注,博纳网络编辑整理。
 

当前文章链接:/construction/appkaifa/2920.html
如果您觉得案例还不错请帮忙分享:

[声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【qin@198bona.com 】,我们在确认后,会立即删除,保证您的版权。