React Native Headless JS(后臺任務)

React Native Headless JS(后臺任務)

Headless JS是一種使用js在后臺執行任務的方法。它可以用來在后臺同步數據、處理推送通知或是播放音樂等等。

JS端的API

首先我們要通過AppRegistry來注冊一個async函數,這個函數我們稱之為“任務”。注冊方式類似在index.js中注冊RN應用:

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

然后創建require對應的SomeTaskName.js文件:

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

你可以在任務中處理任何事情(網絡請求、定時器等等),但唯獨不要涉及用戶界面!在任務完成后(例如在promise中調用resolve),RN會進入一個“暫?!蹦J?,直到有新任務需要執行或者是應用回到前臺。

Java端的API

沒錯,我們還需要一些原生代碼,但是請放心并不麻煩。你需要像下面這樣繼承HeadlessJsTaskService,然后覆蓋getTaskConfig方法的實現:

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任務就會開始執行。

注意事項

默認情況下,如果應用正在前臺運行時嘗試執行任務,那么應用會崩潰。這是為了防止開發者在任務中處理太多邏輯而拖慢用戶界面

如果你是通過BroadcastReceiver來啟動的服務,那么謹記在從onReceive()返回之前要調用HeadlessJsTaskService.acquireWakelockNow()

內容來源于網絡請自行查閱

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容