Excel vs Power BI: Which Is Better?
Thu, 16 July 2026
Inspirational journeys
Follow the stories of academics and their research expeditions
It's a dream of every software engineer to work for Alphabet. For those who don't know, Alphabet Inc. is a father company that owns all of the entirety of Google and all its subsidiary companies. Here is a list of what Alphabet Inc. owns. I am providing this just in case you want to work in any other company similar to Google.

Android is a Linux-grounded open-source operating system. It was originally created by Andy Rubin and has become one of the most extensively used smartphone OSs globally today. It still stands strong as one of the most reliable OS, compared to the iOS. This makes working with Android one of the most sought-after job roles.
Due to Android’s fashionability, there's a high demand for Android development places. This interview preparation companion is designed to help both freshers and educated professionals prepare effectively if you're looking for a job in Android development.
Before we start to prepare you for the interview, let me show you the vacancies available in some of the trending job roles for 2027.

Below are some generally asked questions that can help you in excelling during your interview.
Starting off with beginner-level Android interview questions
Let's break down the 17 concepts you actually need to know to survive Android development right now. No fluff. Just the reality of the stack.
Android is an open-source beast now. I’m seeing my code run on smartwatches, TVs, cars running Android Auto, and Chromebooks. As of right now, if you're not maintaining legacy code, you're targeting Android 17. That's API level 37, codenamed Cinnamon Bun. It dropped in June 2026. (If you're still cleaning up last year's code, we might be working for Android 16, API 36).
I see the Android OS stack like a five-layer cake.
You write your Kotlin. You hit build. Gradle spins up (and hopefully doesn't throw a cryptic caching error), chewing your code, XML, and resources into an AAB (Android App Bundle) or an older APK.
Your human-readable logic becomes bytecode. When a user taps your app icon, ART fires up. Here’s the brilliant part of the OS: Android treats every single app as a completely separate user. It hands your app a unique ID and throws it into an isolated sandbox. If my app hard-crashes because of a botched network request, it dies alone in its sandbox. It doesn't take down the user's entire phone.
Forget what you learned in CS 101. We don't have a main() function here. The entry point for the user is an Activity. Every app needs at least one. The OS wakes your app up by calling specific lifecycle methods based on what the user is doing. It’s the literal starting line for user interaction.
Because they don't realize onCreate() just builds an empty shell. When the activity boots up in onCreate, there is zero user interface. If you stop there, this could result in a black screen.
To solve this, you would have to call setContentView(R.layout.activity_main). It inflates your XML layout and adds the styles to the buttons and text. This lets the user actually tap on them.
You have to master this. It's not optional.
Fragments as modular sub-activities. We needed them when tablets got popular and used a completely new layout. We had to show a list on the left and details on the right without writing two different apps.
They parasitize off a host activity. They have their own lifecycle, they receive their own inputs, but they are entirely dependent on the host to exist.
Fragment lifecycle is tied to the host activity. But it also has extra steps for UI rendering. It is very tricky.
onCreateView() has just one job. It elevates the XML and returns the View object.
If you try to find a button and set a click listener there, you're begging for a NullPointerException because the layout might not be fully baked. Do all your UI logic inside onViewCreated(). It fires immediately after, guaranteeing the UI components are fully initialized and safe in memory.
Everything you see is a View. It's just a rectangle on the screen. A Button, an EditText, an ImageView. It draws the pixels and listens for your thumbs.
A ViewGroup is an invisible container. Technically, a ViewGroup is just a subclass of a View. It holds Views (or other ViewGroups) and tells them where to sit. ConstraintLayout, LinearLayout, FrameLayout are ViewGroups.
Because it works. XML describes data so both humans and machines can read it fast. It’s lightweight, meaning faster UI rendering. It forces a hard separation between your visual design and your Kotlin business logic. It’s highly readable, and it handles deeply nested layouts while keeping the code perfectly structured.
An Android app is a five-layer coupled piece, wired together in the AndroidManifest.xml file. The OS cant imagine its existence unless they are declared in the manifest file.
Toast is a non-blocking bubble of text that pops up. It's generally used in designs for quick feedback and fades away automatically. Since it's non-blocking, the user can keep tapping things behind it.
If there's one concept that will save your career, it's understanding Context. It's your app's environment. It's how you access resources or inflate layouts.
But passing the wrong one will crash your app. Activity Context is tied to the Activity. Use it for UI stuff, like showing a Toast or a Dialog. When the Activity dies, this context dies. Application Context is tied to the whole app. Use this for background tasks or singleton databases.
Passing an activity context to a singleton database instance creates a new activity when users rotate their phone. But this database is still holding onto the old activity in memory. This causes a massive memory leak.
I love this platform, but I won't lie about the pain points.
We deal with these constraints daily. We write better code, we test on terrible devices, and we plug the memory leaks. That's the job.
So you survived the basics. You know your activities from your fragments, and you aren't leaking memory every time a user turns their screen. Good. Now we need to talk about how the pieces actually communicate, how we render complex data without burning through RAM, and how we handle the background execution restrictions that Google aggressively pushes every year.
Here are the intermediate-level questions and answers that separate the juniors from the devs. I actually trust to push code to production.
The AndroidManifest.xml file is like a checklist for the app. If a component isn't listed in the file, the OS will never know about its existence. It provides such details to the Android system before running the Kotlin code.
You declare your activities and services in the same file. You ask for user permissions here (camera, location, and network access). You define which screen is the main entry point. Then you set up your Intent Filters.
If the app runs without registering an activity, it crashes with an ActivityNotFoundException error.
A layout is just the invisible scaffolding that holds your UI together.
For example. If you try to display a list of 1,000 items and you create a new View object for each, the phone will run out of memory and kill the app.
RecyclerView is how we display massive datasets. It works with the ViewHolder pattern. Instead of listing all 1,000 views, the system only creates the 10 or 12 views. This will fill the physical screen matching the layout and add a couple of extras at the end.
Wth this, when you scroll down the item that disappears from the top but it's not destroyed. It gets recycled instead. The OS hands that exact same view back to the bottom of the list.
The onBindViewHolder() method swaps out the old data for the new. This literally recycles pixels. It reduces CPU overhead and keeps the frame rate buttery smooth.
You'll need to interrupt the user eventually. We generally reach for these four:
An Intent is a message you send to the OS declaring your intention to do something. You want to open a camera? Start a background service? Move to another screen? You need an Intent.
A PendingIntent is essentially a VIP backstage pass you hand to a foreign application.
Normally, an Intent executes right now, inside your app. But what if you want the Android Notification Manager to open your app when the user taps a push notification three hours from now, long after your app has been swiped away and killed?
You wrap your Intent in a PendingIntent and hand it to the OS. Because you created it, it retains your app's security context. The OS can execute it later, on your behalf, with your exact permissions. We use these constantly for Notifications, Alarms, and Home Screen Widgets.
The Software Development Kit of Android is the toolbox we use to build, debug, and package these apps. Some components from these SDKs are
Android Jetpack is Google's massive suite of libraries and architectural guidelines.
Before Jetpack, Android development was the Wild West. You had to write hundreds of lines of boilerplate code to handle simple local databases, and managing lifecycles was a total nightmare. If a user rotated their phone, your Activity died, your background network request lost its callback, and the app crashed.
Jetpack brought sanity to the stack. It gave us Architecture Components (ViewModel, Room), modern UI toolkits (Jetpack Compose), and standard components for backward compatibility (AndroidX). We don't build modern apps without it.
This is a critical Jetpack component. ViewModel stores and manages UI data in a way that actively respects lifecycles.
When the user rotates their phone from portrait to landscape, the OS ruthlessly destroys and recreates the Activity. If you stored your user's form data in the Activity's variables, it's gone.
The ViewModel lives outside the Activity's immediate lifecycle. It sits safely in memory managed by the ViewModelStore. When the Activity gets destroyed and rebuilt during that rotation, it simply reconnects to the existing ViewModel. Your data is instantly recovered without needing another expensive network call.
Room is the official Jetpack persistence library. It's a clean abstraction layer over the legacy SQLiteOpenHelper.
Writing raw SQLite in Android was miserable. You had to manually map database cursors to your objects, which was highly error-prone. Room fixes this. First, it handles the object-relational mapping (ORM) automatically. Second, it provides compile-time verification. If you have a typo in your SQL query, the app simply refuses to build. You catch the bug in your IDE, not as a runtime crash in production. Finally, it integrates flawlessly with Kotlin Coroutines and LiveData, automatically pushing database changes to your UI.
A Service runs long operations in the background without a UI. But you have to be careful—Google has severely restricted them to stop lazy developers from draining user batteries.
WorkManager is the Jetpack solution for the battery-saving massacre I just mentioned.
If you have a quick task that needs to happen right now on the current screen (like fetching a user profile), use a Kotlin Coroutine.
But if you have deferrable, guaranteed background work—like uploading heavy analytics logs, compressing an image, or syncing a local database—you use WorkManager. It survives app exits and device reboots. You can hand it constraints, like "Only run this heavy upload when the phone is connected to Wi-Fi and plugged into a charger." WorkManager catches the request, respects the device's battery limits, and guarantees the job gets done eventually.
Alright, you’ve survived the basics and the intermediate hurdles. If you're interviewing for a Senior or Lead position, nobody cares if you know how to center a button in XML anymore. They want to know if you can architect a highly concurrent, reactive application without tanking the frame rate or leaking megabytes of memory.
Here is the advanced stuff that separates the code monkeys from the true engineers. Welcome to the final boss.
Sometimes the out-of-the-box UI widgets just don't cut it. When the design team hands you a complex, animated, entirely non-standard graph, you have to build it yourself.
Here is the blueprint for creating a custom view from scratch:
If you don't know how your code is being executed, you can't optimize it.
DVM (Dalvik Virtual Machine) is the ghost of Android past. It relied on Just-In-Time (JIT) compilation, meaning it compiled your app's bytecode into machine code on the fly as the user was running the app. It was designed for ancient phones with zero storage space, but it chewed up battery life and CPU cycles like crazy.
ART (Android Runtime) is the modern standard. It introduced Ahead-Of-Time (AOT) compilation (and now a hybrid AOT/JIT model). Now, when the user downloads your app, ART immediately compiles your bytecode into native machine code during installation.
The tradeoff? Apps take up slightly more disk space and take a few seconds longer to install.
The benefit? Massive performance boosts, buttery smooth UI rendering, and significantly better battery life because the CPU isn't constantly translating code on the fly.
"The app is slow" is a developer's worst nightmare because it could mean anything. Here is my standard diagnostic playbook for keeping users happy:
Adding a library is easy. Managing dependencies when a project hits a million lines of code is a nightmare if you don't have a strict system.
If you suggest using standard JVM threads in a modern Android interview, you will fail.
Traditional JVM threads are incredibly heavy. They map directly to OS-level threads. If you spin up 1,000 of them, you will crash the app with an OutOfMemoryError.
Coroutines are lightweight, virtual threads managed by the Kotlin runtime, not the OS. I can launch 100,000 coroutines concurrently on a single background thread without breaking a sweat. They use suspend functions to pause their execution and yield the thread to another coroutine while waiting for a network response, completely eliminating thread-blocking. They are the absolute standard for modern async work.
Both are builders that start concurrent work, but they handle the aftermath entirely differently.
RxJava is largely a thing of the past. Kotlin Flow is our modern, native reactive data stream. It emits values sequentially over time.
Jetpack Compose fundamentally changes how we build UIs. It's a declarative toolkit.
In the old XML days, if data changed, you manually updated the widget: myTextView.text = "New Text".
In Compose, you bind your UI directly to a State object. When that state changes, Compose triggers Recomposition. The framework is highly intelligent—it scans your UI tree, identifies only the specific composable functions that read that exact piece of state, and re-executes them to draw the new data. The rest of the UI is completely ignored and left untouched. It's brutally efficient and eliminates manual UI bugs.
Focus entirely on the modern stack. Master Activity/Fragment lifecycles, UI rendering, concurrency (Kotlin Coroutines), and local databases (Room). Don't ignore core computer science—you will still need to practice algorithmic coding questions and defend your architectural choices (like MVVM).
It’s the series of states a component goes through. It goes from creation (onCreate), to visibility (onStart, onResume), to backgrounding (onPause, onStop), to total destruction (onDestroy). Understanding this is non-negotiable if you want to prevent crashes and memory leaks.
Gradle is the automated build toolkit. It takes your Kotlin code, XML files, and third-party libraries, compiles them all together, and packages them into the executable AAB (Android App Bundle) or APK that users actually install.
Maven refers to the repository ecosystem. We use Maven Central or Google's Maven repository—massive online servers where thousands of developers host third-party libraries (like Retrofit or Glide) so you can easily pull them into your project via Gradle.
Expect standard Data Structures and Algorithms (Arrays, HashMaps, Strings). However, Android interviews heavily feature domain-specific tests: expect to be asked to build a complex UI list, handle multi-threading scenarios, or debug a fake crash log.
Review core Modern Android Development (MAD) and Jetpack concepts first. Then grind core algorithmic problems. Finally, build real-world projects so you can confidently explain the architectural decisions you made in past apps.
Kotlin. Period. While some legacy enterprise apps still use Java, Kotlin has been Google's official preferred language since 2019. Expect over 90% of modern interviews to mandate Kotlin.
LeetCode, HackerRank, and CodeSignal are standard for algorithm practice. For architecture, stop reading basic tutorials and go look at Google's official open-source sample repositories on GitHub to see how enterprise code is actually structured.
Medium, Stack Overflow, and tech blogs are great resources, but your primary source of truth should always be the official Android Developer Documentation.
AsyncTask was historically used for background threading, but it was deprecated in API 30 because it was fundamentally broken. It caused massive memory leaks on screen rotation, swallowed exceptions silently, and missed UI updates. It has been entirely replaced by Kotlin Coroutines for standard async work and WorkManager for guaranteed background jobs.
Preparing for Android interview needs a strong understanding of fundamental concepts. Professionals should also get used to practicin advanced development practices. This article was designed keeping in mind that professional of all status like fresher and experienced professionals. This content will boost your confidence and help you ace your interviews.
Thu, 16 July 2026
Fri, 31 January 2025
Tue, 18 February 2025
Thu, 24 September 2026
Fri, 30 May 2025
Wed, 28 May 2025
Fri, 23 May 2025
Wed, 18 June 2025
Fri, 18 July 2025
Wed, 30 July 2025
© 2026 Sprintzeal Americas Inc. - All Rights Reserved.