Skip to content

Instantly share code, notes, and snippets.

@girvo
Forked from liamzebedee/BackgroundTask.h
Created March 2, 2016 06:38
Show Gist options
  • Save girvo/b116a469231a1405800a to your computer and use it in GitHub Desktop.
Save girvo/b116a469231a1405800a to your computer and use it in GitHub Desktop.
Attempts at implementing background tasks in React Native iOS
//
// BackgroundTask.h
// tomtrack
//
// Created by Liam Edwards-Playne on 13/02/2016.
//
#import "RCTBridgeModule.h"
@interface BackgroundTask : NSObject <RCTBridgeModule>
@end
//
// BackgroundTask.m
// tomtrack
//
// Created by Liam Edwards-Playne on 13/02/2016.
//
#import <Foundation/Foundation.h>
#import "BackgroundTask.h"
#import "RCTUtils.h"
/*
Sample:
BackgroundTask.beginBackgroundTask("gpsTracking", () => {})
*/
@implementation BackgroundTask
RCT_EXPORT_MODULE();
#pragma mark - Public API
RCT_EXPORT_METHOD(beginBackgroundTask:(NSString *)taskName jsCallback:(RCTResponseSenderBlock)jsCallback)
{
UIApplication *application = RCTSharedApplication();
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithName:taskName expirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
printf("Running in the background\n");
// Call the JS code
jsCallback(@[]);
printf("Back from the JS\n");
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
@end
var BackgroundTask = require('react-native').NativeModules.BackgroundTask;
BackgroundTask.beginTask("taskName", function(){})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment