React Native Headless JS(后台任务)promise
Headless JS是一种使用js在后台执行任务的方法。它能够用来在后台同步数据、处理推送通知或是播放音乐等等。网络
首先咱们要经过AppRegistry来注册一个async函数,这个函数咱们称之为“任务”。注册方式相似在index.js中注册RN应用:less
AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));
async
而后建立require对应的SomeTaskName.js文件:ide
module.exports = async (taskData) => { // 要作的事情 }
你能够在任务中处理任何事情(网络请求、定时器等等),但惟独不要涉及用户界面!在任务完成后(例如在promise中调用resolve),RN会进入一个“暂停”模式,直到有新任务须要执行或者是应用回到前台。函数
没错,咱们还须要一些原生代码,可是请放心并不麻烦。你须要像下面这样继承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來源:简书著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。