在现代开发环境下,不管是前端还是移动端,都必须处理一些基本任务,比如定时任务、后台任务等。而在React Native开发环境下,react-native-android-job是一个非常实用的npm包,它能够帮助开发者轻松地在ReactNative项目中完成各种任务。本文将详细介绍如何使用react-native-android-job包。
什么是react-native-android-job?
react-native-android-job是一个React Native上的npm包,它是Google的Android-Job库的React Native版本。该库提供了一种简单、轻量的方式来在Android设备中设置后台任务。
使用react-native-android-job包,开发者可以轻松地执行各种类型的任务,如定时任务、网络请求、检查新数据并进行提醒等。而且,使用该包能够从设备的资源管理方面进行优化,节省设备的电池和CPU资源。
安装
使用npm来安装react-native-android-job非常简单,只需在终端中输入以下命令:
npm install --save react-native-android-job
配置
Android
react-native-android-job包有一些特定的配置步骤,需要在Android项目中进行配置。
配置Gradle
在你的项目的android/app/build.gradle
文件中添加以下行:
dependencies { implementation "com.firebase:firebase-jobdispatcher:0.8.5" implementation "com.evernote:android-job:1.2.6" implementation "com.android.support:support-v4:27.1.1" }
配置MainApplication
在你的项目中MainApplication.java
文件中,添加下面的import
import com.android.job.JobManager;
然后在onCreate()
方法中添加以下代码:
@Override public void onCreate() { super.onCreate(); JobManager.create(this).addJobCreator(new YourJobCreator()); }
iOS
未实现
使用
任务调度
定义一个任务
任务是一个简单的类,它继承了Job
类,并且实现了onRunJob
方法。
-- -------------------- ---- ------- ------ ----- ---------- ------- --- - ------ ------ ----- ------ --- - ------------------ --------- ------ ---------- --------------- ------- - -- ------------ ------ ------------------- -- ------ - -
当你要定义一个原生任务时,它必须:
- 继承
Job
类。 - 实现
onRunJob
方法来执行任务,该方法将在工作线程中运行。 - 创建
Params
对象以定义任务的一些属性(例如重试策略、是否需要网络等)。
调度任务
你需要在项目的代码中调用scheduler.schedule(job)
以便计划一个任务。
private void scheduleJob() { new JobRequest.Builder(ExampleJob.TAG) .setExact(5000L) .build() .schedule(); }
然而,这里的注意点是你需要在你的代码的某处创建JobManager
,就像在下面的例子中。以下是创建JobManager
的例子:
JobManager.create(context);
创建任务后,任务的调度是由Android-Job通过和操作系统的交互来进行调度的。当任务到达计划执行时间时,Android-Job会启动工作线程并调用onRunJob
方法来执行任务。
任务执行
你可以使用Job
类提供的以下方法来执行任务。
onRunJob()
onRunJob()
方法是任务执行的入口点。
Result onRunJob(Params params)
它接受一个Params
对象作为参数,并返回一个Result
对象。
RescheduleOffsetMillis(long offset)
如果在任务中发生异常,需要更新计划调度,则可以使用RescheduleOffsetMillis(long offset)
方法。该方法将任务重新调度到指定的时间偏移量。
-- -------------------- ---- ------- ------ ----- ---------- ------- --- - --------- ------ ---------- --------------- ------- - --- - ----------- ------ ------------------- - ----- ---------- ---------- - ------ ----------------- ------------------- - ------ -- --------------- - - -
RescheduleReason
发生异常时重新计划任务并通过此方法传递原因。
-- -------------------- ---- ------- ------ ----- ---------- ------- --- - --------- ------ ---------- --------------- ------- - --- - ----------- ------ ------------------- - ----- ---------- ---------- - ------ ----------------- ------------------------- -------------- - - -
CancelReason
-- -------------------- ---- ------- --------- ------ ---------- --------------- ------- - --- - ------ ------ ------------------- - ----- ---------- ---------- - ------ -------------- ---------------------- ------------ - - -
任务管理
你可能需要在某些时候控制任务的管理。例如,你可能想取消一个已计划的任务或者修改一个已计划的任务等。
取消任务
使用scheduler.cancel(jobId)
方法来取消任务。
private void cancelJob(int jobId) { JobManager.instance().cancel(jobId); }
取消所有任务
使用scheduler.cancelAll()
方法来取消所有任务。
private void cancelAllJobs() { JobManager.instance().cancelAll(); }
删除任务
使用JobManager
类的removeJobWithTag()
或removeJobById()
方法可以删除一个任务。
private void removeJob(String tag) { JobManager.instance().removeJobByTag(tag); }
恢复被取消的任务
当取消重复任务时,Android-Job会在系统端删除所有的一样的任务。因此当你想重新启动这个任务时,你需要使用以下方法:
new JobRequest.Builder(ExampleJob.TAG) .setRequirementsEnforced(true) .startNow() .build() .schedule();
任务的属性
你可以使用JobInfo
类来配置一个任务的属性(比如周期、网络连接状态等)。
JobInfo.Builder builder = new JobInfo.Builder(JOB_ID, componentName); builder.setPeriodic(15 * 60 * 1000); // one hour builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); // 需要连接WIFI
示例代码
-- -------------------- ---- ------- -- ------- ------- ------ ------ - --------- - ---- -------- ------ - ----------- ----- ----- ---------------- - ---- --------------- -- -------- ------ - ------------- -------- --- - ---- --------------------------- ----- ------------- - ------------ -- ------- ----- ------- - --------- -- --------- ------ ------- ----- --- ------- --------- - -- ------------------ ----------------- - -- ---- --- --- - --- ------------------------------ ----------------------------- --------------------- ---------------------- - ----- ------------------------------------------------- --------- -- ------ --------------------------- - -- ------------------ --------------- - -- -------- ----------------------------------- - -------- - ------ - ----- ------------------------- ----------------- ------------------------------- ----- ---------------------- -------- --- ------- ------------------- ----------------- ----------------------------- ----- ---------------------- ------ --- ------- ------------------- ------- -- - - ----- ------ - ------------------- ---------- - ----- -- --------------- --------- ----------- --------- ---------------- ---------- -- ------- - --------- --- ---------- --------- ------- --- -- ---
总结
react-native-android-job是一个实用、简单和轻量级的npm包,使用它能够轻松地在ReactNative项目中管理任务。本文介绍了如何在React Native项目中使用react-native-android-job来定义、调度、执行和管理任务。使用这些技术,你可以高效地完成各种不同类型的定时任务和后台任务。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065b4bc6eb7e50355dbfe0