Intermediate everything in Android & Kotlin, page 7

lateinit var vs. val by lazy in Android
Tests your grasp of Kotlin property initialization and its lifecycle implications. A good answer contrasts mutability (var/val), initialization timing, and thread safety.

What are the advantages of a Kotlin data class and its functions?
Tests knowledge of Kotlin's idiomatic features. A good answer explains the main advantage (boilerplate reduction), lists generated functions like toString() and equals(), and describes copy() for immutable state updates.

What is a Kotlin extension function? Write one for String.
Tests adding functionality to classes without inheritance. Define extension functions as static utilities, explain their use case (e.g., third-party libs), then write hasWhitespace using an idiomatic method like any. A red flag is manually looping.
Constraints: Building UIs with Relationships, Not Boxes
Constraints define UI by relationships, not nested boxes. Think of it like telling elements 'align with that one' instead of placing them in rigid rows. This is key for complex, responsive layouts, but can lead to unsolvable rules if not defined carefully.
WorkRequest: The Blueprint for Android Background Tasks
A WorkRequest is the blueprint for a background task in Android. It defines *what* work to do and *when*, letting WorkManager handle execution for tasks like syncing data. The footgun is putting logic in the request; it only configures, the Worker acts.
OkHttp Interceptors: Middleware for Your Network Stack
OkHttp Interceptors act as middleware for your network stack, letting you observe, modify, or short-circuit requests and responses. Use them to automatically add auth tokens or log traffic. The main footgun is order: application interceptors run once per call.
Gradle Build Scripts: The Recipe for Your App
Gradle build scripts are your app's recipe, using a declarative DSL to define dependencies and build variants. They manage libraries and create versions like debug vs. release.

ContentProvider: Android's Shared Data API
A ContentProvider is a structured API gateway for your app's private data. It lets other apps query, insert, or delete data securely without direct access. The main footgun is improper permission handling, which can leak data or cause crashes.

Kotlin's Job: A Handle to a Background Task
A Job is a handle to a coroutine, letting you manage its lifecycle. You get one from launch to control background tasks like network calls. The key footgun: a child's *failure* (Exception) cancels its parent, but a child's *cancellation* does not.
Kotlin Collections: Think Transformations, Not Loops
Treat collection operations as a pipeline, not a for loop. Each function (map, filter) transforms data and passes it to the next stage, ideal for turning API data into UI models.

ProGuard Keep Rules: A "Do Not Remove" List for Your Code
ProGuard keep rules are a "do not remove" list for Android's code shrinker, telling it what to spare when it can't detect usage. This is crucial for code accessed via reflection or JNI.

Android Work Chaining: An Assembly Line for Tasks
Chaining work in Android is like an assembly line for background tasks, ensuring one task finishes successfully before the next begins. It's used for multi-step operations like fetching, processing, and saving data.

Android Overdraw: Stop Painting Pixels Twice
Overdraw is wasted GPU work, painting the same pixel multiple times in one frame. It causes UI stutter and drains battery. Fix it by removing unneeded backgrounds and flattening your UI layouts.
Google Play Release Tracks: A Funnel for Quality
Google Play's release tracks are a funnel for quality, moving from a small trusted group to the public. Use them to get feedback, from internal QA (Internal track) to a wider audience (Closed/Open tracks), before a full production launch.
Android Worker: For Deferrable Background Tasks
An Android Worker handles background tasks that must complete, even if the app closes or the device restarts. Use it for reliable, deferrable work like syncing data or uploading logs. The footgun is using it for immediate tasks; the OS can delay its execution.

Android Custom Views: Beyond the Standard Library
A custom view gives you full control over a UI component's drawing and interaction. Use it for unique elements like charts or radial menus that standard widgets can't handle. The footgun is building one when composing existing views would be simpler.

Android XML Layouts: The Classic UI Blueprint
XML layouts are the classic blueprints for Android screens, defining the structure of UI elements (Views) in a static file. You'll find them in legacy projects or when using View-based components like ConstraintLayout and RecyclerView.

Higher-Order Functions: Passing Code as Data
Higher-order functions treat code as data, accepting other functions as arguments. Lambdas are a concise syntax for creating these function arguments inline, powering collection operations like map and filter or UI listeners.

APK Signature Scheme: Verifying App Integrity
An APK signature is a tamper-evident seal, proving an app is from a specific developer and hasn't been altered. Android uses it to trust app updates and prevent malware. The footgun: losing your signing key means you can never update your app again.

Doze and App Standby: Android's Battery Savers
Doze and App Standby are Android's battery-saving modes that restrict background work. Doze activates when a device is idle, while App Standby targets unused apps. The footgun is assuming background jobs run on time; they are deferred and batched.
We are hiring for this. Every open role lists the topics its interview covers, so you can prepare for the real thing rather than guessing.
See open roles