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來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。