Skip to content

Commit

Permalink
Do not throw on empty registered headless task (#24671)
Browse files Browse the repository at this point in the history
Summary:
Start a `HeadlessJsTaskService` on Android without registered is dangerous on apps because `HeadlessJsTaskService` will acquire a [`PARTIAL_WAKE_LOCK`](https://developer.android.com/topic/performance/vitals/wakelock), without calling `onHeadlessJsTaskFinish` this lock won't release until timeout(if exist). This lock will prevent the android device from sleeping.

Although on JS will throw an error if no headless tasks registered, but it's hard to notice while app in the background. No visual information is displayed.

This PR will log a warning instead of Error, and just mark the task to finished on native if nothing registered in order to release the wake lock.

[Android] [Fixed] - Fix unexpected PARTIAL_WAKE_LOCK when no headless tasks registered.
Pull Request resolved: #24671

Differential Revision: D15164310

Pulled By: cpojer

fbshipit-source-id: 05b62017ba094d0faabc2848dc8bb6c26101321b
  • Loading branch information
timwangdev authored and facebook-github-bot committed May 1, 2019
1 parent 5200ea8 commit bdb1d43
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion Libraries/ReactNative/AppRegistry.js
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,9 @@ const AppRegistry = {
startHeadlessTask(taskId: number, taskKey: string, data: any): void {
const taskProvider = taskProviders.get(taskKey);
if (!taskProvider) {
throw new Error(`No task registered for key ${taskKey}`);
console.warn(`No task registered for key ${taskKey}`);
NativeModules.HeadlessJsTaskSupport.notifyTaskFinished(taskId);
return;
}
taskProvider()(data)
.then(() =>
Expand Down

0 comments on commit bdb1d43

Please sign in to comment.