Android Job Ready Course Notes
1. Android Fundamentals
Course Overview & Objectives
Android development is used to build mobile applications for Android devices using Kotlin or Java.
Goals of Android Development
• Build modern Android apps
• Understand Android architecture
• Learn UI design with Jetpack Compose
• Use Firebase, APIs, Room Database
• Prepare for Android interviews and jobs
Introduction to Android Studio & Project Setup
Android Studio
Android Studio is the official IDE for Android app development.
Important Components
• Project Explorer
• Emulator
• Logcat
• Gradle
• Layout Inspector
Create First Project
Steps: 1. Open Android Studio 2. Click New Project 3. Select Empty Activity 4. Choose Kotlin 5. Click
Finish
Project Structure
• java/ → Kotlin files
• res/ → resources like images and XML
• [Link] → app permissions and activities
• Gradle Scripts → dependencies and build configuration
1
Gradle Build System
What is Gradle?
Gradle is a build automation tool used to manage dependencies and build APK files.
Example Dependency
implementation("[Link]:lifecycle-viewmodel-compose:2.7.0")
Types of Gradle Files
• Project-level Gradle
• App-level Gradle
Core Android Components
1. Activity
Represents one screen.
2. Service
Runs background tasks.
3. Broadcast Receiver
Receives system events.
4. Content Provider
Shares data between apps.
Git & GitHub Basics
Important Commands
git init
git add .
git commit -m "First Commit"
git push
Pull Request (PR)
Used to merge code into another branch.
2
2. Activities & Intents
Activity Lifecycle
Lifecycle methods:
1. onCreate()
2. onStart()
3. onResume()
4. onPause()
5. onStop()
6. onDestroy()
Example
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContent {
Text("Hello")
}
}
Practical Use Cases
onPause()
Used when app goes into background.
Example:
• Pause music
• Save user data
onDestroy()
Used for cleanup.
Lifecycle Observer
Lifecycle Observer observes activity lifecycle automatically.
3
Example
class MyObserver : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
Log.d("TAG", "Started")
}
}
Launch Modes
Standard
Default mode.
SingleTop
Avoid duplicate activity at top.
SingleTask
Only one instance in task.
Real Example
• Notification screen
• Payment screen
Intents
Explicit Intent
Open another activity.
val intent = Intent(this, HomeActivity::[Link])
startActivity(intent)
Implicit Intent
Open external apps.
val intent = Intent(Intent.ACTION_VIEW)
[Link] = [Link]("[Link]
startActivity(intent)
4
Toast Message
[Link](this, "Saved", Toast.LENGTH_SHORT).show()
Logging
Log.d("TAG", "Debug Message")
Log Types
• Log.d()
• Log.e()
• Log.i()
Logcat & Debugging
Logcat
Used to see app logs and crashes.
Debugging
• Breakpoints
• Step Over
• Step Into
3. Jetpack Compose & Modern UI
What is Jetpack Compose?
Modern toolkit for building UI using Kotlin.
Advantages
• Less code
• Faster development
• Reactive UI
5
Basic Composables
Column
Arrange items vertically.
Column {
Text("Hello")
Button(onClick = {}) {
Text("Click")
}
}
Row
Arrange items horizontally.
Box
Stack items.
Modifier
Modifier changes UI behavior.
Example
Text(
text = "Hello",
modifier = Modifier
.padding([Link])
.fillMaxWidth()
)
Composition & Recomposition
Composition
Initial UI creation.
Recomposition
UI updates when state changes.
6
Example
var count by remember { mutableStateOf(0) }
State Management
remember
Stores state during recomposition.
rememberSaveable
Stores state during configuration change.
Example
var name by rememberSaveable {
mutableStateOf("")
}
Side Effects
LaunchedEffect
Run coroutine in Compose.
LaunchedEffect(Unit) {
delay(1000)
}
Lazy Layouts
LazyColumn
Efficient scrolling list.
LazyColumn {
items(100) {
Text("Item $it")
7
}
}
Animations
animateFloatAsState
val size by animateDpAsState(
targetValue = [Link]
)
Async Image Loading
Using Coil.
AsyncImage(
model = imageUrl,
contentDescription = null
)
Navigation in Compose
NavHost
Controls navigation graph.
NavController
Navigates between screens.
Example
NavHost(navController, startDestination = "home") {
composable("home") {
HomeScreen()
}
}
8
Compose & XML Interoperability
Use Compose in XML
ComposeView(this).setContent {
Text("Compose UI")
}
4. Services, Broadcasts & Notifications
Services
Types of Services
1. Foreground Service
2. Background Service
3. Bound Service
Foreground Service Example
Music player app.
Broadcast Receiver
Receives system broadcasts.
Example
class AirplaneReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("TAG", "Airplane Mode Changed")
}
}
Notifications
Notification Channel
Required for Android 8+.
9
Example
val notification = [Link](this, "channel")
.setContentTitle("Title")
.build()
Work with Location
Permissions
<uses-permission android:name="[Link].ACCESS_FINE_LOCATION" />
Get Current Location
Use FusedLocationProviderClient.
Real-time Location Updates
Example Use Cases
• Food delivery app
• Cab booking app
• Tracking apps
5. Threads, Kotlin Coroutines & Flow
Threads vs Coroutines
Thread
Heavyweight.
Coroutine
Lightweight asynchronous programming.
Example
CoroutineScope([Link]).launch {
delay(1000)
}
10
Suspend Function
suspend fun fetchData() {
delay(2000)
}
CoroutineScope
Defines lifecycle of coroutine.
Types
• GlobalScope
• lifecycleScope
• viewModelScope
Dispatchers
Main
UI thread.
IO
Network/database.
Default
Heavy calculations.
Job
Controls coroutine lifecycle.
val job = launch {
}
[Link]()
11
Flow
Flow emits stream of data.
Cold Flow
Starts when collected.
Hot Flow
Always active.
StateFlow
Used for UI state.
private val _state = MutableStateFlow(0)
val state = _state
SharedFlow
Used for one-time events.
Example:
• Snackbar
• Navigation event
Async Network Calls
[Link] {
val data = [Link]()
}
6. MVVM Architecture & App Structure
What is MVVM?
MVVM = Model + View + ViewModel
12
Advantages
• Clean architecture
• Easy testing
• Better code structure
Components
Model
Handles data.
View
UI layer.
ViewModel
Business logic.
MVVM Flow
UI → ViewModel → Repository → API/Database
Example Structure
[Link]
│
├── data
├── domain
├── presentation
├── di
ViewModel Example
class MainViewModel : ViewModel() {
private val _count = MutableStateFlow(0)
val count = _count
fun increment() {
_count.value++
13
}
}
7. Dependency Injection
What is Dependency Injection?
DI provides required objects automatically.
Benefits
• Reusable code
• Easy testing
• Loose coupling
Hilt Dependency Injection
Add Plugin
id("[Link]")
Hilt Application Class
@HiltAndroidApp
class MyApp : Application()
Inject Dependency
@AndroidEntryPoint
class MainActivity : ComponentActivity()
Constructor Injection
class UserRepository @Inject constructor() {
}
14
8. Multi-language Support
What is Localization?
Support multiple languages.
Resource Folder
English
res/values/[Link]
Hindi
res/values-hi/[Link]
Example
<string name="hello">Hello</string>
Hindi:
<string name="hello">नमस्ते</string>
9. App Events & Analytics
Analytics
Used to track user behavior.
Example Events
• Login
• Purchase
• Button click
• Screen open
15
Firebase Analytics
Add Dependency
implementation("[Link]:firebase-analytics")
Log Event
[Link]("login") {
param("method", "email")
}
Important Interview Questions
Android Fundamentals
1. What is Android Architecture?
2. Explain Gradle.
3. Difference between APK and AAB.
Activity & Intent
1. Explain Activity Lifecycle.
2. Difference between Explicit and Implicit Intent.
3. What are launch modes?
Jetpack Compose
1. What is recomposition?
2. Difference between remember and rememberSaveable.
3. Explain LazyColumn.
Coroutines
1. Difference between coroutine and thread.
2. What is suspend function?
3. Difference between StateFlow and SharedFlow.
MVVM
1. Why use MVVM?
2. Explain Repository pattern.
3. What is ViewModel?
16
Hilt
1. What is dependency injection?
2. Why use Hilt?
3. Explain constructor injection.
Mini Project Ideas
1. Notes App
2. Weather App
3. Food Delivery UI
4. Chat Application
5. Expense Tracker
6. Task Manager
7. Social Media App
8. E-Commerce App
Best Practices
• Use MVVM architecture
• Use StateFlow with Compose
• Avoid GlobalScope
• Use Repository pattern
• Keep UI clean and reusable
• Use proper naming conventions
• Write modular code
Recommended Libraries
Purpose Library
UI Jetpack Compose
Networking Retrofit
Image Loading Coil
Dependency Injection Hilt
Database Room
Async Coroutines
Navigation Navigation Compose
Backend Firebase
17
Final Learning Path
1. Android Basics
2. Activities & Intents
3. Compose UI
4. State Management
5. Coroutines & Flow
6. MVVM Architecture
7. Retrofit API
8. Room Database
9. Firebase
10. Complete Projects
11. Interview Preparation
12. Resume & Portfolio
18