From 795370789bc950202bce4550dce8b42dbd21d361 Mon Sep 17 00:00:00 2001 From: Ori Harel Date: Mon, 18 Sep 2017 05:22:56 -0700 Subject: [PATCH] re #15915 HeadlessJsTaskService is expected to run on UI thread Summary: Headless tasks are required to run in the main thread, however due to the nature of the React context creation flow, the handler may be returned outside of the main thread, causing the HeadlessJsTaskContext to throw an exception. Swipe out the app. send push notification from a server that starts a HeadlessJsTaskService Closes https://github.com/facebook/react-native/pull/15940 Differential Revision: D5852448 Pulled By: foghina fbshipit-source-id: 54c58a1eb7434dd5de5c39c28f6e068ed15ead9d --- .../facebook/react/HeadlessJsTaskService.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.java b/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.java index 4d88f009c..3add544a9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.java +++ b/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.java @@ -116,11 +116,19 @@ public abstract class HeadlessJsTaskService extends Service implements HeadlessJ } } - private void invokeStartTask(ReactContext reactContext, HeadlessJsTaskConfig taskConfig) { - HeadlessJsTaskContext headlessJsTaskContext = HeadlessJsTaskContext.getInstance(reactContext); + private void invokeStartTask(ReactContext reactContext, final HeadlessJsTaskConfig taskConfig) { + final HeadlessJsTaskContext headlessJsTaskContext = HeadlessJsTaskContext.getInstance(reactContext); headlessJsTaskContext.addTaskEventListener(this); - int taskId = headlessJsTaskContext.startTask(taskConfig); - mActiveTasks.add(taskId); + + UiThreadUtil.runOnUiThread( + new Runnable() { + @Override + public void run() { + int taskId = headlessJsTaskContext.startTask(taskConfig); + mActiveTasks.add(taskId); + } + } + ); } @Override