By Fatskills Exam Guides Team — the exam nerds behind 28,500+ quizzes and 2.1M practice questions across 500+ global exams.
Mobile devices are portable computing devices—smartphones, tablets, wearables, and embedded systems—that run applications, connect to networks, and interact with users via touch, voice, or sensors. You use them to build apps, automate workflows, collect data, or deploy edge computing solutions in industries like healthcare, retail, logistics, and IoT.
Mobile devices dominate user engagement (over 60% of global internet traffic), enable real-time data collection, and power edge AI (e.g., on-device ML for privacy-sensitive tasks). Businesses use them to: - Deploy field workforce tools (e.g., inventory scanners, delivery tracking).- Build consumer apps (e.g., banking, e-commerce, social media).- Prototype IoT systems (e.g., Raspberry Pi + sensors for smart agriculture).- Optimize operations with AR/VR (e.g., warehouse picking, remote assistance).
Mobile devices run on specialized OSes designed for constrained hardware and touch input: - Android (Google): Open-source, Java/Kotlin-based, dominates global market share (~70%). Customizable but fragmented across devices.- iOS (Apple): Closed ecosystem, Swift/Objective-C-based, optimized for performance and security. Higher app revenue per user.- Embedded Linux (e.g., Raspberry Pi OS): Lightweight, used for IoT/edge devices. Supports Python, C++, and GPIO control.- Wear OS (Google) / watchOS (Apple): Optimized for small screens, health sensors, and low power.
Key difference: Android allows sideloading apps; iOS restricts installation to the App Store.
How you build apps depends on the use case: | Model | Description | Use Case | Tools/Frameworks | |---------------------|-----------------------------------------------------------------------------|-----------------------------------|---------------------------| | Native | Platform-specific code (Swift for iOS, Kotlin for Android). Best performance. | High-performance apps (games, AR) | Xcode, Android Studio | | Cross-Platform | Single codebase (Dart, JavaScript, C#) compiled to native or web. | MVPs, business apps | Flutter, React Native | | Web Apps | HTML/CSS/JS run in a browser. No install required. | Simple tools, PWA (Progressive Web Apps) | Vue.js, Angular | | Hybrid | Web app wrapped in a native container (e.g., Cordova). | Legacy apps, internal tools | Capacitor, Ionic |
Mobile devices include sensors and hardware features you can leverage: - Location: GPS, Wi-Fi/Bluetooth triangulation (e.g., ride-hailing apps).- Motion: Accelerometer, gyroscope (e.g., fitness trackers, AR).- Environmental: Light, proximity, barometer (e.g., smart home apps).- Biometric: Fingerprint, face ID (e.g., authentication).- Connectivity: NFC (contactless payments), Bluetooth LE (wearables), 5G (low-latency streaming).- Camera: Image processing (e.g., QR scanners, document digitization).
Example: A retail app might use the camera for barcode scanning and GPS for store locators.
Mobile networks are unreliable. Design apps to: - Cache data locally (SQLite, Realm, or IndexedDB).- Sync when online (e.g., Firebase, CouchDB).- Handle conflicts (e.g., last-write-wins or manual resolution).
Tools: - Android: Room (SQLite wrapper), WorkManager (background tasks).- iOS: Core Data, Background Fetch.- Cross-platform: PouchDB, WatermelonDB.
Mobile apps handle sensitive data. Key considerations: - Permissions: Request only what you need (e.g., CAMERA, LOCATION). Users deny apps with excessive permissions.- Data Storage: Encrypt local data (Android Keystore, iOS Keychain).- Network Security: Use HTTPS, certificate pinning (e.g., OkHttp on Android, Alamofire on iOS).- Authentication: OAuth 2.0 (Google Sign-In, Firebase Auth), biometrics.
CAMERA
LOCATION
Pitfall: Storing API keys in app code (decompileable). Use backend services or environment variables.
Mobile apps don’t run continuously. The OS manages their state: 1. Not Running: App is closed.2. Foreground: App is visible and interactive.3. Background: App is paused (e.g., user switches to another app). Limited execution time (e.g., 10s on iOS).4. Suspended: App is frozen (no CPU access). OS may terminate it to free memory.
Example: A music app plays audio in the background but pauses when the user locks the phone.
A mobile app typically includes: - UI Layer: Screens built with XML (Android), Storyboards (iOS), or declarative frameworks (Flutter, Jetpack Compose).- Business Logic: Handles data processing (e.g., calculating discounts, validating inputs).- Data Layer: Manages local storage (SQLite) and remote APIs (REST/GraphQL).- Platform APIs: Access device features (camera, GPS) via OS-specific SDKs.
Simplified Flow:
User taps button → UI triggers business logic → Logic fetches data (local/remote) → Data updates UI
Mobile apps communicate with servers via: - REST/GraphQL: Standard for APIs (e.g., GET /products).- WebSockets: Real-time updates (e.g., chat apps).- Push Notifications: OS-managed messages (Firebase Cloud Messaging for Android, APNs for iOS).
GET /products
Example: A weather app fetches forecasts via REST and receives alerts via push notifications.
Goal: Create a cross-platform app that adds/deletes tasks.
Install Flutter: bash git clone https://github.com/flutter/flutter.git -b stable export PATH="$PATH:`pwd`/flutter/bin" flutter doctor # Check dependencies
bash git clone https://github.com/flutter/flutter.git -b stable export PATH="$PATH:`pwd`/flutter/bin" flutter doctor # Check dependencies
Create a new project: bash flutter create todo_app cd todo_app
bash flutter create todo_app cd todo_app
Replace lib/main.dart with: ```dart import 'package:flutter/material.dart';
lib/main.dart
void main() => runApp(TodoApp());
class TodoApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: TodoList(), ); } }
class TodoList extends StatefulWidget { @override _TodoListState createState() => _TodoListState(); }
class _TodoListState extends State { List _tasks = []; final TextEditingController _controller = TextEditingController();
void _addTask() { setState(() { _tasks.add(_controller.text); _controller.clear(); }); } void _deleteTask(int index) { setState(() { _tasks.removeAt(index); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('To-Do List')), body: Column( children: [ TextField(controller: _controller), ElevatedButton(onPressed: _addTask, child: Text('Add')), Expanded( child: ListView.builder( itemCount: _tasks.length, itemBuilder: (context, index) { return ListTile( title: Text(_tasks[index]), trailing: IconButton( icon: Icon(Icons.delete), onPressed: () => _deleteTask(index), ), ); }, ), ), ], ), ); }
} ```
bash flutter run -d chrome # Web preview flutter run -d emulator-5554 # Android emulator
Expected Outcome: A functional to-do app with add/delete features, running on Android, iOS, or web.
Fix: Follow Material Design (Android) and Human Interface Guidelines (iOS).
Blocking the Main Thread
Fix: Use background threads (Android: AsyncTask, Coroutines; iOS: DispatchQueue; Flutter: Isolate).
AsyncTask
Coroutines
DispatchQueue
Isolate
Overlooking Battery Optimization
Fix: Use FusedLocationProvider (Android) or CLLocationManager (iOS) with low-power modes. Schedule background tasks with WorkManager (Android) or Background Fetch (iOS).
FusedLocationProvider
CLLocationManager
WorkManager
Background Fetch
Hardcoding API Keys
strings.xml
Info.plist
Fix: Use backend services (e.g., Firebase) or environment variables (e.g., .env files with flutter_dotenv).
.env
flutter_dotenv
Assuming All Devices Are the Same
MediaQuery
get_it
SharedPreferences
UserDefaults
Hive
ActivityCompat.requestPermissions
Localizable.strings
ML Kit
ZXing
flutter_signature_pad
You’re building a fitness app that tracks runs using GPS. What’s the most battery-efficient way to implement location updates on Android?
A) Use LocationManager with GPS_PROVIDER and update every 1 second.B) Use FusedLocationProviderClient with PRIORITY_BALANCED_POWER_ACCURACY and a 5-second interval.C) Use GeofencingApi to trigger updates only when the user enters a predefined area.D) Use WorkManager to poll the GPS every minute.
LocationManager
GPS_PROVIDER
FusedLocationProviderClient
PRIORITY_BALANCED_POWER_ACCURACY
GeofencingApi
Correct Answer: B Explanation: FusedLocationProviderClient optimizes battery by combining GPS, Wi-Fi, and cell towers. PRIORITY_BALANCED_POWER_ACCURACY balances accuracy and power, and a 5-second interval is sufficient for run tracking.Why the Distractors Are Tempting: - A: GPS_PROVIDER alone is power-hungry; 1-second updates drain the battery quickly.- C: Geofencing is for static location triggers (e.g., "arrived at gym"), not continuous tracking.- D: WorkManager is for background tasks, but polling GPS every minute is still inefficient.
Your iOS app crashes when users rotate their devices. What’s the most likely cause?
A) The app doesn’t support landscape orientation in Info.plist.B) The view controller’s viewWillTransition(to:with:) method isn’t implemented.C) Auto Layout constraints are missing or conflicting.D) The app is using UIStackView incorrectly.
viewWillTransition(to:with:)
UIStackView
Correct Answer: C Explanation: Missing or conflicting Auto Layout constraints cause views to resize incorrectly during rotation, leading to crashes (e.g., NSInternalInconsistencyException).Why the Distractors Are Tempting: - A: Unsupported orientations prevent rotation but don’t cause crashes.- B: viewWillTransition is optional; not implementing it won’t crash the app.- D: UIStackView misconfigurations cause layout issues but rarely crashes.
NSInternalInconsistencyException
viewWillTransition
You’re building a Flutter app that fetches data from a REST API. What’s the best way to handle errors (e.g., no internet, 404)?
A) Wrap the API call in a try-catch block and show a generic error message.B) Use a FutureBuilder with ConnectionState checks and display specific error states (e.g., "No internet").C) Ignore errors and retry indefinitely until the request succeeds.D) Use setState to update the UI directly from the API call.
try-catch
FutureBuilder
ConnectionState
setState
Correct Answer: B Explanation: FutureBuilder provides ConnectionState (e.g., waiting, done, error) to handle loading, success, and error states gracefully. Showing specific errors improves UX.Why the Distractors Are Tempting: - A: Generic error messages frustrate users; specific feedback is
waiting
done
error
Join 4M+ learners. Unlock unlimited quizzes, wrong-answer tracking, flashcards + reminders, study guides, and 1-on-1 challenges.