React Native Headless JS(后台任务)(转载)

React Native Headless JS(后台任务)promise

Headless JS是一种使用js在后台执行任务的方法。它能够用来在后台同步数据、处理推送通知或是播放音乐等等。网络

JS端的API

首先咱们要经过AppRegistry来注册一个async函数,这个函数咱们称之为“任务”。注册方式相似在index.js中注册RN应用:less

AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));async

而后建立require对应的SomeTaskName.js文件:ide

module.exports = async (taskData) => {
  // 要作的事情
}

你能够在任务中处理任何事情(网络请求、定时器等等),但惟独不要涉及用户界面!在任务完成后(例如在promise中调用resolve),RN会进入一个“暂停”模式,直到有新任务须要执行或者是应用回到前台。函数

Java端的API

没错,咱们还须要一些原生代码,可是请放心并不麻烦。你须要像下面这样继承HeadlessJsTaskService,而后覆盖getTaskConfig方法的实现:ui

public class MyTaskService extends HeadlessJsTaskService {
  @Override
  protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
      return new HeadlessJsTaskConfig(
          "SomeTaskName",
          Arguments.fromBundle(extras),
          5000);
    }
    return null;
  }
}

好了,如今当你启动服务时(例如一个周期性的任务或是响应一些系统事件/广播),JS任务就会开始执行。spa

注意事项

默认状况下,若是应用正在前台运行时尝试执行任务,那么应用会崩溃。这是为了防止开发者在任务中处理太多逻辑而拖慢用户界面code

若是你是经过BroadcastReceiver来启动的服务,那么谨记在从onReceive()返回以前要调用HeadlessJsTaskService.acquireWakelockNow()blog

做者:呼呼哥连接:https://www.jianshu.com/p/2e606dad7356來源:简书著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
相关文章
相关标签/搜索