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