Engineering Roles

Mobile Engineer Interviews: iOS And Android Depth

The Mythic Intel Team · Feb 16, 2025 · 7 min read

A mobile engineer interview probes a specific kind of depth: how well you understand the platform underneath your code. Web and backend engineers can often abstract away the runtime. Mobile developers cannot, because a misunderstood lifecycle callback or a retain cycle ships as a crash or a memory leak on a real user's phone. If you are preparing for a mobile developer interview, whether the iOS interview questions or the Android interview questions, the candidates who stand out can explain what the operating system does to their app, not just what their app does.

This guide walks the rounds and the core concepts a mobile engineer interview tests on both platforms: lifecycle, memory management, threading and concurrency, offline state, and the release train. Expect a recruiter screen, a coding round, a platform-fundamentals round, an app or system design round, and a behavioral conversation.

Lifecycle: the question they will not skip

On Android, you will be asked to explain the Activity lifecycle and its callbacks in order. The system calls them as the activity is created, becomes visible, gains and loses focus, and is destroyed:

  • onCreate() then onStart() then onResume() as the activity comes to the foreground.
  • onPause() then onStop() as it leaves the foreground.
  • onDestroy() when it is finished or reclaimed.
  • onRestart() when a stopped activity returns to view, before onStart() runs again.

Know the practical edges. A configuration change such as a rotation destroys and recreates the activity, which is why you hoist state out of it. Be ready to discuss saving and restoring state, and why a ViewModel survives configuration changes when the activity does not.

On iOS, the equivalent depth is the view controller lifecycle (viewDidLoad, viewWillAppear, viewDidAppear, viewWillDisappear) and, for the app itself, the scene-based lifecycle introduced with UIScene. Say where you put work: one-time setup in viewDidLoad, refresh in viewWillAppear.

Memory management: ARC versus garbage collection

This is the cleanest way an interviewer separates surface knowledge from real understanding, so be precise about how each platform reclaims memory.

iOS uses Automatic Reference Counting. ARC is not a garbage collector. It tracks references at compile time and deallocates an object the moment its reference count reaches zero, deterministically. Every strong reference increments the count. The classic failure is a retain cycle: two objects that hold strong references to each other never reach zero, so neither is freed. You break the cycle with weak or unowned:

  • weak does not increase the count and becomes nil when the target is deallocated, so it must be optional. Use it for delegates and back references to a parent.
  • unowned also does not increase the count but is non-optional and assumes the target outlives the reference. Accessing it after deallocation crashes. Use it only when you are certain the lifetime holds.

Android (and Kotlin or Java) uses a tracing garbage collector. Memory is reclaimed when the collector determines an object is no longer reachable, which is non-deterministic in timing. Leaks here usually come from holding a reference past its useful life: a static field pinning an Activity, a listener you never unregistered, or a long-lived object capturing a Context. Be ready to talk about how you would find one, for example with the memory profiler or LeakCanary.

Threading and concurrency

Every mobile platform has one rule that dominates: the UI thread (the main thread) must never block. On Android, blocking the main thread past a few seconds triggers an ANR, the "Application Not Responding" dialog. So interviewers want to hear how you move work off it and back.

On Android, the current answer is Kotlin coroutines with structured concurrency. Mention viewModelScope for work tied to a ViewModel, dispatchers (Dispatchers.IO for blocking I/O, Dispatchers.Main for UI updates), and WorkManager for deferrable, guaranteed background work that must survive process death. A coroutine launched in viewModelScope is cancelled automatically when the ViewModel is cleared, which prevents a whole class of leaks.

On iOS, the modern answer is Swift Concurrency: async/await, Task, structured task groups, and actors for protecting shared mutable state from data races. Grand Central Dispatch (DispatchQueue) is the older API still worth knowing. The key point on either platform is that UI updates happen on the main thread and everything else gets dispatched away from it.

Offline state and data

Mobile apps run on flaky networks, so the panel will probe how you handle a lost connection. Cover local persistence (Room on Android, Core Data or SwiftData on iOS), a single source of truth where the UI reads from the local store and the network updates it, optimistic updates with reconciliation, and conflict resolution when a queued write loses a race. The strong signal is treating offline as the default case, not an error state bolted on later.

Release trains and rollout

Mobile ships differently from the web because you cannot hotfix instantly. A bad build sits in review and then in users' hands until they update. Be ready to discuss the release train: a regular cadence where work merges to a release branch, goes through staged rollout (a small percentage of users first), and is watched on crash and performance dashboards before full rollout. Mention feature flags to decouple shipping code from enabling it, and the ability to halt a staged rollout when crash rate spikes. This is exactly the operational judgment that distinguishes a senior mobile developer interview answer from a junior one.

The behavioral and design rounds

The app design round asks you to design something like a feed, a chat client, or an offline-first notes app. Drive it from constraints: data model, sync strategy, caching, pagination, and how the UI degrades without a network. The behavioral round asks about shipping under a hard store deadline, a production crash you triaged, and a disagreement on architecture.

A verified, role-specific practice room, like the one Mythic Intel builds from a mobile posting, grades a spoken answer on accuracy, completeness, structure, and proof, which catches the moment your explanation of ARC or the Activity lifecycle gets fuzzy. The most reliable preparation is to say these explanations out loud, in full sentences, until the lifecycle order and the strong-versus-weak distinction come without hesitation.

your turn

Stop reading about interviews. Start training for yours.