Top 30 Mobile Interview Questions and Answers
30 multiple-choice questions on Mobile, drawn from 30 bites out of the 90 tagged Mobile on Tezvyn. Answer them here or read straight down. Every question carries the correct option, why it is correct, and a link to the bite it came from.
30 questions. Pick an answer, or open “Show the answer” to read it.
Answers are graded in your browser. Nothing is saved, and no XP or streak is earned here. The app keeps score.
Question 1 of 30
Which of the following is a key benefit of using StyleSheet.create() for styling in React Native?
Show the answer
Answer: c · It optimizes performance by processing style objects once and referencing them efficiently on the native side.
The card explicitly states that StyleSheet.create() processes style objects once and sends them to the native side, which is much faster than re-serializing raw JavaScript style objects on every render. Its primary use is for static styling, not dynamic changes, although it can be combined with dynamic styles.
Question 2 of 30
What is the fundamental mechanism by which Hermes improves React Native app startup performance?
Show the answer
Answer: d · It performs Ahead-Of-Time (AOT) compilation of JavaScript into optimized bytecode during the app's build phase.
Hermes is an Ahead-Of-Time (AOT) focused engine that pre-compiles JavaScript into optimized bytecode during the build process, reducing the work the device has to do at startup. While it contributes to a smaller app size, its primary mechanism for faster startup is not tree-shaking or JIT compilation.
Read the full bite: Hermes: The JS Engine for Faster React Native Apps
Question 3 of 30
Which fundamental design aspect of the React Native Bridge is primarily responsible for its performance limitations and visible UI jank?
Show the answer
Answer: b · Its asynchronous message passing mechanism between the JavaScript and native threads.
The card explicitly states that the Bridge's asynchronous nature and the inherent delays it causes are the source of its main limitations, leading to UI jank and preventing synchronous UI layout access. While JSON serialization adds overhead, the core problem causing delays and visual 'jumps' is the asynchronous communication.
Read the full bite: The React Native Bridge: Why It's Being Replaced
Question 4 of 30
When is it most appropriate to use Expo Application Services (EAS)?
Show the answer
Answer: d · When preparing a production-ready build for app store submission or pushing over-the-air updates.
EAS is designed for production workflows, handling cloud builds, app store submissions, and over-the-air updates for React Native apps. It is explicitly stated as distinct from local development tools like the `expo` CLI, which are used for prototyping and running local development servers.
Read the full bite: Expo Application Services (EAS): The Cloud Toolchain for React Native
Question 5 of 30
Which scenario requires creating a custom development build in Expo?
Show the answer
Answer: d · Integrating a React Native library that includes native Android/iOS code not part of the Expo SDK.
Custom development builds are specifically for integrating React Native libraries that contain native code not already included in the Expo SDK. Pure JavaScript libraries or features already in the SDK do not require a custom build, and performance optimization through pre-compilation is not the primary purpose of this process.
Read the full bite: Adding Native Code to Expo (The Modern 'Eject')
Question 6 of 30
What is the recommended approach for managing user input in a React Native TextInput?
Show the answer
Answer: c · Set the value prop to a state variable and update it via the onChangeText callback.
The card emphasizes treating TextInput as a controlled component, where the app's state is the single source of truth, updated by onChangeText and reflected by the value prop. Option B describes an uncontrolled component, which is not the recommended mental model for TextInput.
Read the full bite: React Native TextInput: Handling User Input
Question 7 of 30
For which scenario is React Native's Pressable component most beneficial compared to a simple Button or View with an onPress handler?
Show the answer
Answer: c · When you want to detect specific touch stages like a finger pressing down, holding, or releasing.
Pressable's core purpose is to provide granular control over touch interactions, allowing detection of events like onPressIn, onLongPress, and onPressOut. The card explicitly states that for standard, platform-styled buttons with minimal logic, the basic Button component is simpler, making option D incorrect.
Read the full bite: Pressable: A More Powerful Way to Handle Touches
Question 8 of 30
What is the primary consequence of omitting or incorrectly handling the onRequestClose prop for a React Native Modal on Android?
Show the answer
Answer: b · Android users will be unable to dismiss the modal using the hardware back button.
The card explicitly states that forgetting onRequestClose "disables the Android back button, trapping your user." This prop is crucial for allowing users to dismiss the modal via the hardware back button on Android. The modal will still render its content even if this prop is omitted.
Read the full bite: React Native Modal: Presenting Content Above Other Views
Question 9 of 30
For which scenario is Platform.select the most appropriate tool in React Native?
Show the answer
Answer: a · Adjusting minor UI properties like padding or background color based on the operating system.
Platform.select is designed for small-to-medium platform differences, such as tweaking styles like padding or background colors. It is explicitly advised against for entire screens or complex logic flows, which are better handled by platform-specific file extensions.
Read the full bite: Platform.select: Write Once, Adapt Anywhere
Question 10 of 30
You are building 'free' and 'pro' app versions using product flavors. What is the most secure and efficient way to control access to pro-only features?
Show the answer
Answer: a · Use a `buildConfigField` to create a compile-time constant and check it in the code.
Using `buildConfigField` creates a compile-time constant, allowing the compiler to completely remove pro features from the free build, which is more secure and reduces APK size. Runtime checks or server calls leave the pro code inside the free app.
Question 11 of 30
When automating nightly APK deployments on a headless CI server, which characteristic of ADB makes it suitable for this task?
Show the answer
Answer: b · It is a client-server program whose command-line client can run without Android Studio or any IDE
ADB is defined as a standalone client-server command-line tool in the Android SDK Platform Tools, so it can script builds and deployments without an IDE present. The distractor calling it an Android Studio plugin reflects a common misconception, while JDWP is actually the separate protocol used for Java breakpoint debugging, not ADB operations.
Read the full bite: What is ADB? Describe two common commands and what they accomplish.
Question 12 of 30
A ScrollView contains a TouchableOpacity. If a user touches an item and then drags, which statement accurately describes the default interaction using the Gesture Responder System?
Show the answer
Answer: c · The TouchableOpacity is asked first to respond to the initial touch, and if movement occurs, the ScrollView can then request to become the responder.
By default, the deepest component (TouchableOpacity) is asked first to handle the touch. However, during movement, a parent component like a ScrollView can use onMoveShouldSetResponder to request control and take over the gesture, as described in the canonical example. Option D describes the capture phase, which is not the default behavior.
Read the full bite: The Gesture Responder System: Who Gets the Touch?
Question 13 of 30
On a smartphone with a 390 CSS pixel wide screen, how does the viewport meta tag with width=device-width and initial-scale=1.0 affect rendering?
Show the answer
Answer: d · The layout viewport is set to 390 CSS pixels and the page loads at 100% zoom.
width=device-width sets the layout viewport to the screen width in CSS pixels (390), and initial-scale=1.0 loads the page at 100% zoom. Option A describes what happens without the tag, while Option C confuses CSS pixels with physical pixels and incorrectly attributes zoom locking to initial-scale.
Question 14 of 30
What is the most crucial step to ensure the RefreshControl spinner remains visible during a data fetch?
Show the answer
Answer: b · Setting the 'refreshing' prop to true immediately when 'onRefresh' is called.
The card emphasizes that RefreshControl is a controlled component; the 'refreshing' prop must be explicitly set to true at the start of the 'onRefresh' callback to keep the spinner visible during data fetching. Option C is necessary for RefreshControl to function, but not specifically for maintaining its visibility during the fetch itself.
Read the full bite: RefreshControl: The Pull-to-Refresh Handler
Question 15 of 30
Which callback sequence occurs when a user leaves an Activity and returns later without the system destroying it?
Show the answer
Answer: b · onPause, onStop, onRestart, onStart, onResume
Navigating away triggers onPause and onStop, while returning from the stopped state calls onRestart, onStart, and onResume. onCreate only runs after the Activity has been fully destroyed, so including it is a common misconception.
Read the full bite: Describe the Android Activity lifecycle and callback order
Question 16 of 30
What is the primary reason to choose React Native Reanimated for animations involving user gestures or heavy JS computation?
Show the answer
Answer: c · It allows animation logic to execute independently on the native UI thread, preventing stuttering.
The card explicitly states that Reanimated moves animation logic off the JavaScript thread onto the native UI thread, allowing animations to run smoothly at 60-120 fps even when the JS thread is busy. Option A is incorrect because the card mentions Reanimated introduces its own concepts, implying it's not always simpler, and its core benefit is performance, not code brevity.
Read the full bite: React Native Reanimated: Off-Thread Animations
Question 17 of 30
In the Android Debug Bridge (ADB) architecture, which component is responsible for executing commands directly on the target Android device?
Show the answer
Answer: c · The ADB daemon (adbd), which runs on the device and processes commands
The card states that the 'daemon' (adbd) runs on the Android device and is responsible for executing commands. The client and server components operate on the development machine, handling command initiation and communication management, respectively.
Read the full bite: Android Debug Bridge (ADB): A Developer's Remote Control
Question 18 of 30
Under which circumstance would a developer most likely choose Stack Navigator over a native navigation solution?
Show the answer
Answer: d · For applications where a highly unique and custom navigation appearance is crucial.
The card states that Stack Navigator is ideal when "having a highly custom look and feel is more important than achieving maximum performance," due to its JavaScript-based implementation allowing deep customization. Option B is incorrect because Stack Navigator trades performance for customization, and option C describes a benefit more aligned with native solutions.
Read the full bite: Stack Navigator: JavaScript-based Screen Transitions
Question 19 of 30
For which scenario would passing data via route parameters be considered an inefficient or inappropriate approach?
Show the answer
Answer: d · Managing a user's global authentication token that impacts multiple, unrelated parts of the application.
The card explicitly states that route parameters are not a good fit for global state like authentication status that needs to be accessed by many unrelated screens, recommending dedicated state management instead. The other options describe appropriate uses for route parameters, where data is specific to a navigation action.
Question 20 of 30
When an Android app recovers from process death, what is the key difference in state restoration compared to a configuration change, and what is the recommended solution?
Show the answer
Answer: b · Process death destroys the entire application process, including standard ViewModels, making SavedStateHandle essential for transient UI state restoration.
Process death recreates the entire process, destroying standard ViewModels, which is why SavedStateHandle is needed to persist transient UI state. In contrast, configuration changes preserve the process and existing ViewModel instances. Option D is incorrect because standard ViewModels do not survive process death.
Read the full bite: Handle Android Process Death vs. Configuration Changes
Question 21 of 30
How are navigation actions typically processed within a nested navigator structure?
Show the answer
Answer: d · The action is first attempted by the currently focused navigator, then bubbles up to its parent if unhandled.
The card states that actions are first attempted by the currently focused navigator and only bubble up to its parent if that navigator cannot handle the action. This ensures localized control and isolated state for each navigator, rather than immediate global handling.
Read the full bite: Nested Navigators: Building Complex UI Flows
Question 22 of 30
In which scenario would Native Stack Navigator be the least suitable choice for screen navigation?
Show the answer
Answer: d · An app requiring highly customized screen transition animations.
The card explicitly states to avoid Native Stack Navigator if highly customized screen transitions are needed, as its customizability is limited due to being a wrapper around native components. The other options describe scenarios where Native Stack Navigator is the recommended or default choice.
Read the full bite: Native Stack Navigator: Native Performance, Less Customization
Question 23 of 30
To execute code every time a React Native screen becomes visible after being navigated away from, which method is most appropriate?
Show the answer
Answer: d · Subscribing to the 'focus' event using navigation.addListener
The card states that screens remain mounted when navigated away from, so a standard useEffect with an empty dependency array (C) only runs on initial mount, not subsequent visibility changes. Subscribing to the 'focus' event (D) is the correct way to run code specifically when a screen comes into view.
Read the full bite: React Navigation Lifecycle: Screens Don't Unmount
Question 24 of 30
When designing an A/B test for copy in a native app without app store releases, what is the primary architectural pattern that safely decouples content changes from binary updates?
Show the answer
Answer: b · Fetching experiment parameters asynchronously via remote config while merging them with local defaults
Remote config merged with local defaults lets the app render immediately and change copy without a store release. Treating native apps like websites and using a CMS is wrong because binaries bundle assets at build time and cannot update instantly like the web.
Read the full bite: A/B test copy in a native app without app store releases
Question 25 of 30
What is the main advantage of using conditional navigators for authentication in React Native?
Show the answer
Answer: a · It ensures a clear separation of navigation history, preventing authenticated users from returning to login screens.
The card states that conditional navigators are crucial because "A logged-in user should never be able to use the hardware back button to return to the login screen," which is achieved by completely swapping navigation graphs. Option C is a common misconception, as the card explicitly advises against using this pattern for conditional UI within an authenticated part of the app.
Read the full bite: React Native Auth Flows: Conditional Navigators
Question 26 of 30
What is the primary mechanism FlatList uses to ensure smooth performance with long lists on mobile devices?
Show the answer
Answer: d · It maintains a small "render window" of items, mounting and unmounting components as the user scrolls.
FlatList's core performance optimization is virtualization, which means it only renders a limited "window" of items that are currently visible or near the viewport. Option C is incorrect because rendering all items, even off-screen, would still consume excessive memory, which FlatList aims to prevent.
Read the full bite: FlatList: Performant Virtualized Lists in React Native
Question 27 of 30
According to the provided information, what is a crucial caveat regarding the effectiveness of App Store Optimization (ASO)?
Show the answer
Answer: c · ASO cannot overcome the fundamental flaws of a low-quality or undesirable application.
The card explicitly states, "ASO is not a substitute for a good product. Optimizing a buggy or useless app will only accelerate its failure." This highlights that ASO cannot compensate for fundamental product quality issues. Distractor D is incorrect because the card emphasizes ASO as a "continuous process," not a one-time task.
Read the full bite: App Store Optimization (ASO): SEO for Mobile Apps
Question 28 of 30
What is the primary reason iOS transitions an app from the BACKGROUND to the SUSPENDED state?
Show the answer
Answer: a · To free up CPU cycles and battery while retaining the app's state in memory for a quick relaunch.
The SUSPENDED state freezes the app in memory, stopping all code execution to conserve CPU and battery, yet allows for a fast return to the ACTIVE state. It does not allow for continued background tasks, nor does it immediately terminate the app.
Read the full bite: iOS App States: From Launch to Suspension
Question 29 of 30
When a pointer down hits both a nested TapGestureDetector and a VerticalDragGestureDetector, what determines the winning gesture?
Show the answer
Answer: d · The arena resolves when only one recognizer remains accepted after voting across pointer events.
The GestureArenaManager collects accept or reject votes from recognizers across multiple pointer events, and the last remaining accepted member wins. This makes A wrong because widget depth alone never decides the outcome; gesture disambiguation is a separate phase after hit testing.
Read the full bite: Explain Flutter's GestureArena and overlapping detector scenario
Question 30 of 30
What is the main purpose of using a loading flag with `onEndReached` in a React Native `FlatList`?
Show the answer
Answer: c · To prevent redundant API calls when the user scrolls quickly near the end of the list.
The card explicitly states that `onEndReached` can fire multiple times, and a loading flag is used to prevent redundant API calls. While a loading flag can also control indicator visibility, its primary role in this context is to manage the 'footgun' of multiple fetches.
Read the full bite: React Native: Infinite Scroll with onEndReached
Could you explain these out loud?
That is what an interview actually tests. Tezvyn gives you questions like these with what the interviewer is really checking, the answer that lands, and the mistake that ends the conversation, in the four minutes before your next meeting.
The iPhone app is on the way
We are building it. Until it lands, nothing here is held back from you: every interview card, your saved cards, streaks and the job board all work in Safari, plus hundreds of free practice quizzes of thirty questions each. Sign in and it all carries over to the app the day it arrives.
Want it as an icon? Tap Share at the bottom of Safari, then Add to Home Screen. It opens full screen and the cards you have read stay available offline.