Skip to main content

Lifecycle

The isActive prop​

The Camera's isActive property can be used to pause the session (isActive={false}) while still keeping the session "warm". This is more desirable than completely unmounting the camera, since resuming the session (isActive={true}) will be much faster than re-mounting the camera view.

For example, you want to pause the camera when the user navigates to another page or minimizes the app since otherwise the camera continues to run in the background without the user seeing it. Also, on iOS a green dot indicates the user that the camera is still active, possibly causing the user to raise privacy concerns. (See "About the orange and green indicators in your iPhone status bar")

For example, you might want to pause the Camera when the user minimizes the app (useAppState()) or navigates to a new screen (useIsFocused()):

function App() {
const isFocused = useIsFocused()
const appState = useAppState()
const isActive = isFocused && appState === "active"

return <Camera {...props} isActive={isActive} />
}

Events​

VisionCamera emits multiple lifecycle events inside a Camera session. In general, initialization happens first, and start/stop events are emitted later on in the timeline:

The onInitialized event​

Once a Camera session has been initialized, the onInitialized event will be fired. All Camera functions (e.g. takePhoto()) will be available immediately after the onInitialized event has been fired.

The event will be fired everytime Camera outputs are re-created, which happens either if the device changes or any output (e.g. photo) is toggled on/off.

The onStarted/onStopped events​

After the Camera session is initialized it might or might not start streaming - depending on whether isActive is true or false.

  • isActive={true}: The session will start streaming. Once it has started streaming the onStarted will be called.
  • isActive={false}: The session will stop streaming and eventually call the onStopped event.

The onPreviewStarted/onPreviewStopped events​

Similar to the onStarted/onStopped events, onPreviewStarted/onPreviewStopped will be called when the Camera started or stopped streaming into the Preview View.

This might also happen when flipping Camera devices (e.g. from back -> front), as the Preview View momentarily stops streaming frames when switching devices.

The onError event​

If the Camera encounters a runtime error, the onError event will be fired. It contains a CameraRuntimeError with a code and message that describe the error.

See "Camera Errors" for more information.

Interruptions​

VisionCamera gracefully handles Camera interruptions such as incoming calls, phone overheating, a different app opening the Camera, etc., and will automatically resume the Camera once it becomes available again.


🚀 Next section: Camera Formats​