Skip to content

Instantly share code, notes, and snippets.

@billmalarky
Last active January 5, 2018 21:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save billmalarky/8255c95f3f73bebac4f680cbe0f6bb70 to your computer and use it in GitHub Desktop.
Save billmalarky/8255c95f3f73bebac4f680cbe0f6bb70 to your computer and use it in GitHub Desktop.
import React, { Component } from 'react';
import {
Platform,
StyleSheet,
Text,
ScrollView,
Button,
Image
} from 'react-native';
import BackgroundTask from 'react-native-background-task'
import queueFactory from 'react-native-queue';
BackgroundTask.define(async () => {
// Init queue
queue = await queueFactory();
// Register job worker
queue.addWorker('pre-fetch-image', async (id, payload) => {
Image.prefetch(payload.imageUrl);
});
// Start the queue with a lifespan
// IMPORTANT: OS background tasks are limited to 30 seconds or less.
// NOTE: Queue lifespan logic will attempt to stop queue processing 500ms less than passed lifespan for a healthy shutdown buffer.
// IMPORTANT: Queue processing started with a lifespan will ONLY process jobs that have a defined timeout set.
// Additionally, lifespan processing will only process next job if job.timeout < (remainingLifespan - 500).
await queue.start(25000); // Run queue for at most 25 seconds.
// finish() must be called before OS hits timeout.
BackgroundTask.finish();
});
export default class App extends Component<{}> {
constructor(props) {
super(props);
this.state = {
showImages: false
};
}
componentDidMount() {
BackgroundTask.schedule(); // Schedule the task to run every ~15 min if app is closed.
}
render() {
return (
<ScrollView style={styles.container}>
<Button title={"Toggle Screen"} onPress={ () => { this.setState({ showImages: !this.state.showImages}) } } />
{! this.state.showImages && <Text style={styles.welcome}>Home Screen</Text> }
{this.state.showImages && <Text style={styles.welcome}>Image Screen</Text> }
{this.state.showImages && <Image style={styles.image} source={{uri: 'https://i.imgur.com/kPkQTic.jpg'}} permanent={false} /> }
{this.state.showImages && <Image style={styles.image} source={{uri: 'https://i.redd.it/uwvjph19mltz.jpg'}} permanent={false} /> }
{this.state.showImages && <Image style={styles.image} source={{uri: 'https://i.redd.it/39w0xd9ersxz.jpg'}} permanent={false} /> }
</ScrollView>
);
}
}
const styles = StyleSheet.create({
container: {
padding: 10
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
image: {
width:150,
height: 204
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment