Zygote
Curiosity

The Curiosity Cabinet

207 small facts, each one a door into a bigger mechanism. Every card is sourced, and every card links to the page that explains the thing it is teasing.

cards
207
tags
38
207 shown

A single DEX file indexed method references with 16 bits, so it could hold at most 65,536 of them. Apps that grew past t…

runtimebuildintermediate

Because resources and code are separate inputs: AAPT2 produces the compiled resource table and the R class, then the com…

buildpackagesintermediate

Feature flags. The aconfig system declares flags that a release configuration sets, allowing one codebase to produce dif…

aospnerd

It means the platform assumes apps must work at any window size. Apps targeting Android 17 have their orientation and re…

uievolutionintermediate

Adaptive icons separate a foreground and a background so launchers can mask them into different shapes without the devel…

packagesuibeginner

Because the Android Gradle Plugin is a Gradle plugin, and each AGP version supports a specific range of Gradle versions.…

buildintermediate

A stable AIDL interface has a frozen version, so vendor and system code can evolve independently without breaking each o…

ipchal-treblenerd

Because exact alarms wake the device at a specific moment, which is expensive when many apps do it. Batching alarms into…

backgroundbatteryintermediate

A hidden, separately encrypted profile introduced in Android 15. Its apps do not appear in the normal launcher, and it c…

privacybeginner

Android 17 enforces strict per-app memory limits based on the device's RAM and terminates processes that exceed them. Th…

memoryintermediate

Open Settings, go to About phone, and tap the Android version row repeatedly. Each release hides a small interactive toy…

historycuriositybeginner

Andy Rubin, Rich Miner, Nick Sears and Chris White founded Android Inc. in 2003. Google acquired the company in 2005, an…

historybeginner

It runs the Linux kernel, but almost nothing else matches a desktop distribution: no GNU coreutils by default, a differe…

kernelbeginner

Around ten seconds for a foreground broadcast and sixty for a background one. Exceeding it produces an ANR. The limits e…

app-componentsthreadingintermediate

When an app fails to respond, the system dumps every thread's stack into /data/anr/traces.txt (or a per-ANR file). It is…

threadingdebuggingintermediate

Hours on a fast machine with plenty of RAM, and it needs hundreds of gigabytes of disk for the source and output. That i…

aospintermediate

At boot, apexd mounts each active APEX from the APEX data directory as a loopback filesystem, and its libraries become a…

hal-treblebootnerd

An APK is an app package installed into the app data model. An APEX is a container mounted at boot as its own filesystem…

hal-treblenerd

The API diff reports on developer.android.com list every class, method and field added, changed or removed between two l…

evolutionintermediate

Almost. It is a ZIP archive with a specific layout: binary AndroidManifest.xml, classes.dex files, resources.arsc, res/,…

packagesbeginner

Bundled resources, native libraries per ABI, uncompressed assets and unused code. App Bundles solve the ABI and density …

packagesbuildintermediate

In Android 17, yes: a user can long-press any app's launcher icon and turn it into a floating bubble, and the system tas…

uievolutionbeginner

A base APK plus configuration splits for ABI, screen density and language, generated for the target device. The device i…

packagesintermediate

It is Android 17's mechanism for exposing app capabilities to on-device AI agents. An app annotates a class and its meth…

evolutionplatformintermediate

Android 11 added app hibernation: an app that has gone unused for months is put into a state where its permissions are r…

privacybackgroundbeginner

No. Service callbacks run on the main thread unless you create your own worker thread. A Service is a lifecycle componen…

app-componentsthreadingbeginner

Because the platform's security model depends on each app having a distinct, unprivileged identity. Root would collapse …

securitybeginner

Android 9 introduced standby buckets: active, working set, frequent, rare and restricted. The system moves an app betwee…

backgroundbatteryintermediate

Isolated processes need a different security context and a different startup path, so Android has an app zygote to fork …

runtimesecuritynerd

A hidden record of which operations an app may perform, separate from manifest permissions. It is what the privacy toggl…

privacypermissionsnerd

Yes. ART became a Mainline module, which means the runtime ships as an APEX and can be updated through Google Play Syste…

runtimehal-trebleintermediate

Hundreds of thousands, and the number changes every release. The API Explorer on this site charts the growth per level f…

evolutionbeginner

Ashmem was an Android kernel driver for shared memory, used for graphics buffers and other cross-process data. It was re…

kernelnerd

Because the end-to-end path — app, AudioFlinger, the audio HAL, the DAC — carries buffers at each stage, and their sizes…

medianerd

Because it is a way to hijack the user's attention, and it was heavily abused. Android 10 restricted background activity…

backgroundintermediate

It is a list of hot classes and methods generated by benchmarking real user journeys, shipped inside the APK. ART compil…

performanceruntimeintermediate

With Battery Historian, which visualised a bug report's batterystats data as a timeline of wakelocks, radio state and CP…

batterydebuggingnerd

Each process's Binder transactions share one mapped buffer, limited to about 1 MB, so that the kernel can guarantee a re…

ipcnerd

Binder link-to-death: the client registers a DeathRecipient on the Binder object, and the driver notifies it when the ob…

ipcnerd

It is not copied. The driver creates a handle — a reference — in the receiving process that points back to the original …

ipcnerd

The kernel maps a region of the target process's address space into the sender temporarily, so the driver writes the tra…

ipckernelnerd

Because a server thread doing work for a high-priority client should run at that priority, or the client's latency suffe…

ipcperformancenerd

The pool grows on demand up to a maximum (often 15 or 16), then reuses threads. A slow service can exhaust its pool, at …

ipcnerd

The name reflects the goal: a library built specifically for Android rather than ported from a desktop. It is smaller an…

kernelnativenerd

Before BLAST, a new window's first buffer could arrive after the transaction that positioned it, producing a visible fla…

graphicsnerd

Before Android 12, an app that wanted to connect to a BLE device asked for location permission, because scanning could r…

connectivityprivacyintermediate

A bootanimation.zip of PNG frames and a description file is drawn by a native binary while the framework starts. It is o…

bootaospbeginner

With eBPF programs attached to sockets in the kernel. The framework updates maps that the programs read, so filtering an…

connectivitykernelnerd

A way to surface a conversation as a floating, movable window. Introduced with Android 10 for messaging and Android 11 a…

notificationsbeginner

The robot mascot, often called Bugdroid, was designed by Irina Blok and her team at Google. It is deliberately simple an…

historycuriositybeginner

Every task's inputs are hashed, and the cache key is that hash plus the task's configuration. If the inputs are the same…

buildnerd

Because it exposes the real pipeline: you submit capture requests, and results arrive asynchronously with metadata and i…

mediaintermediate

Each update had to pass through Google, the SoC vendor (which supplied drivers and kernel support), the phone maker, and…

hal-treblehistorybeginner

The Compatibility Definition Document and the Compatibility Test Suite. A device must implement the documented behaviour…

platformintermediate

Cgroups group processes so the kernel can apply resource limits and accounting to them as a unit. Android groups foregro…

kernelnerd

Android 9 blocks cleartext traffic by default for apps targeting it, to prevent accidental unencrypted connections. Apps…

connectivitysecurityintermediate

No. Hardware codecs handle common formats efficiently, while software codecs cover everything else at higher CPU cost. M…

medianerd

Process fork from Zygote, runtime initialisation, Application creation, activity creation, first layout and first frame.…

performanceintermediate

No. You cannot target a behaviour level you did not compile against, because the manifest values and constant definition…

evolutionbuildintermediate

It injects a Composer parameter, adds group markers around the function body so the runtime can skip or restart it, and …

With Android 17, Google stated that new platform APIs, Jetpack libraries and developer guidance target Jetpack Compose e…

uiintermediate

Yes, in Android 17: ACTION_PICK_CONTACTS gives session-scoped access to specific fields the user chooses, such as an ema…

privacyintermediate

Because the system must make providers available before any component that might use them starts, including other apps. …

app-componentsperformancenerd

Because the singleton outlives the Activity, and the Activity references its whole view hierarchy. That keeps the window…

app-componentsmemorybeginner

Android 17's handoff feature. A tablet taskbar shows the most recent app from your phone, and tapping it launches the ap…

uievolutionbeginner

A function with a hidden Continuation parameter, plus a state machine that lets it resume after a suspension point. The …

kotlinthreadingnerd

The main Looper. Coroutines do not create a new UI thread; they post continuations to the same Handler-backed queue that…

threadingintermediate

It is a virtual Android device that runs on a Linux host or in the cloud, with virtualised hardware instead of a phone. …

aosptoolsnerd

They are successive rewrites: dx became D8, and ProGuard's replacement became R8. The names follow the Android toolchain…

buildintermediate

Almost never on Android. Deprecated APIs stay for compatibility, often for many releases, because removing them would br…

evolutionbeginner

The dessert naming began informally with Cupcake, Donut and Eclair, and the team kept it going because it was memorable …

historybeginner

Core library desugaring rewrites calls to newer Java library APIs into Android-compatible implementations that ship in t…

kotlinbuildintermediate

DEX packs many classes into one file, sharing strings, types and prototypes across them. That makes the file much smalle…

runtimebuildnerd

During idle maintenance, usually while charging. Background dexopt reads the app's execution profile and compiles the ho…

runtimeperformancenerd

Yes, slightly: every block read needs a hash-tree check. The cost is small enough to be hidden behind I/O on modern flas…

securitybootnerd

A short periodic window when Doze lets deferred work run: jobs, network access, alarms. The windows widen over time as t…

backgroundbatteryintermediate

Basically everything. Almost every system service implements a dump() method, and dumpsys calls it over Binder and print…

debuggingsystem-serverbeginner

To let system, vendor and product share one resizable pool instead of fixed partition sizes. Space can move to where an …

boototanerd

Android 15 made edge-to-edge the default and deprecated the old ways of hiding system bars; Android 16 removed the opt-o…

uiintermediate

Because apps used them to wake the device constantly for non-urgent work, which destroyed battery life. Android 12 requi…

backgroundbatteryintermediate

A WorkManager feature that runs work as soon as possible with a short execution window, using JobScheduler's expedited j…

backgroundnerd

Android 17 adds ACTION_OPEN_EYE_DROPPER, a system-rendered colour picker. The app launches it, the system reads the pixe…

privacyuiintermediate

File-Based Encryption splits storage into a device-encrypted area, available during Direct Boot, and a credential-encryp…

securitynerd

Because one persistent connection shared by every app uses far less battery and radio time than each app keeping its own…

backgroundconnectivityintermediate

Because a foreground service can keep an app running indefinitely, so the platform wants to know why. Android 10 introdu…

backgroundintermediate

The HTC Dream, sold by T-Mobile as the G1, launched in September 2008 running Android 1.0. It had a slide-out keyboard a…

historybeginner

Because the user has a right to know that an app is running continuously and using battery. The notification is the cont…

backgroundbeginner

Android 10 implemented /sdcard with FUSE, a userspace filesystem that enforces per-app views. That added a context switc…

storagenerd

Because the platform's LocationManager and Google's Fused Location Provider do different jobs. The fused provider blends…

connectivityintermediate

Dalvik used mark-sweep with stop-the-world pauses. ART introduced Concurrent Mark-Sweep, then Concurrent Copying, then C…

runtimeperformancenerd

Usually because the requested service does not exist on that device or was not registered in that context. Some services…

system-serverintermediate

dumpsys gfxinfo <package>. It reports frame timings and jank counts for recent frames, and framestats gives per-frame de…

graphicsdebuggingintermediate

Before GKI, every device carried its own kernel, compiled by the SoC vendor with its own patches. A kernel security fix …

kernelnerd

Drawing the same pixel more than once in a frame. A background, then a card, then text on the card means some pixels are…

graphicsperformanceintermediate

That a device really implements the vendor interface. If a stock AOSP system image boots on the phone, the OEM's vendor …

hal-trebleintermediate

Android originally used Apache Harmony for its core library. Android 7.0 moved to an OpenJDK-based libcore, which improv…

kotlinruntimenerd

It may work today and fail tomorrow. Android 9 introduced restrictions on non-SDK interfaces, using allowlists, greylist…

evolutionintermediate

It means Canvas drawing operations are recorded into display lists and replayed on the GPU by RenderThread, instead of r…

graphicsintermediate

The Linux kernel starts exactly one userspace process at boot, and Android's is called init. It gets PID 1 because it is…

bootkernelbeginner

init restarts it. Each service in an .rc file has restart behaviour, and init supervises them with a four-state machine.…

bootintermediate

With triggers. init processes actions whose trigger fires — boot, property changes, or an explicit trigger — and service…

bootnerd

The input dispatch timeout is about five seconds. If the app does not consume the event in that window, the system decla…

inputthreadingintermediate

Insets are the numbers that tell an app how much of its window is covered by the status bar, navigation bar, display cut…

uiinputbeginner

When an app takes an intent from an untrusted source and launches it without validating the target, an attacker can reac…

securityapp-componentsnerd

Running code that should not be trusted with app data or permissions, such as some WebView renderers and untrusted effec…

securitynerd

A 2017 flaw that let an attacker craft an APK that the v1 signature scheme would verify while the runtime executed diffe…

securityhistorynerd

Because the system decides when to run deferred work. Jobs are batched with other apps' jobs, constrained by battery and…

backgroundintermediate

kapt runs the full Java annotation-processing pipeline, including generating stubs for Kotlin sources. KSP reads Kotlin …

buildkotlinnerd

On hardware-backed devices, the private key never exists in memory the app can read: the secure environment performs the…

securitynerd

No, and it usually costs more. Android deliberately keeps recently used processes cached because starting a process from…

memorybatterybeginner

Yes — Compose Multiplatform shares UI across Android, iOS, desktop and web — but Google's own guidance is to share busin…

kotlinintermediate

Google announced first-class Kotlin support at I/O 2017, and moved to "Kotlin-first" at I/O 2019. Compose made it a prac…

kotlinbeginner

Mostly, at compile time, for Kotlin code talking to Kotlin code. It cannot protect you at the boundary with Java or with…

kotlinintermediate

Because four launch modes interact with intent flags, task affinity and the recents model, and the outcome depends on th…

app-componentsintermediate

Android 16 introduced a notification style for ongoing, progress-based work — deliveries, rides, timers — that the syste…

notificationsbeginner

The in-kernel killer only knew thresholds and adj scores, not what the processes were doing. Userspace lmkd can see impo…

memorykernelnerd

The local network can reveal a lot about a home and its devices, and it was previously reachable without an explicit gra…

connectivityprivacyintermediate

Because it activates radios. GPS needs satellite acquisition, Wi-Fi scanning needs radio time, and cell location needs t…

connectivitybatteryintermediate

It blocks inside nativePollOnce, an epoll wait in the native message queue. It is not spinning or polling: the kernel wa…

threadingnerd

It selects the product, device and build variant — for example aosp_cf_x86_64_phone-trunk_staging-userdebug — which dete…

aospnerd

Dozens. Modules cover media codecs, Wi-Fi, Bluetooth, the DNS resolver, Conscrypt, the permission controller, ART, time …

hal-trebleintermediate

Android 12 extracts a palette from the user's wallpaper and derives a full tonal set from it, then exposes those colour …

uidesignbeginner

It is a Material 3 update that leans harder on bold typography, shape and motion, with components designed to be more em…

uidesignbeginner

Because an app with a media session publishes its state to the system, and SystemUI renders controls for it. The app doe…

mediaintermediate

A busy message queue with many threads contending for a lock wastes time and can miss frames. Android 17 uses a lock-fre…

threadingruntimenerd

Binder is a kernel driver with a low-level API. AIDL generates the plumbing for typed calls, and Messenger offers someth…

ipcintermediate

Apps do not reach the camera or microphone hardware directly; they go through a system service, which records the access…

privacyintermediate

Not primarily. The main isolation is UIDs plus SELinux, not namespaces, which is why processes see the same filesystem b…

securitykernelnerd

It is loading code at runtime rather than from the APK, historically used to ship updates or plugins. It became a malwar…

securitynerd

Host card emulation: an app or secure element presents an emulated card over the NFC radio, and the terminal talks to it…

connectivitysecuritynerd

Soong, which describes modules in Android.bp files, and Ninja, which executes the resulting build graph. The Make build …

aospbuildnerd

They do, but it is not yours. The system starts a process from Zygote and calls ActivityThread.main(), which prepares th…

app-componentsbeginner

It determines whether a notification makes a sound, appears as a heads-up, or is silently listed. The user, not the app,…

notificationsintermediate

Android 13 made POST_NOTIFICATIONS a runtime permission. On earlier versions, an app could post notifications as soon as…

notificationsprivacybeginner

An .oat file holds compiled native code plus metadata, and the matching .vdex holds the original DEX. ART runs from the …

runtimenerd

Since Android 11, a user can grant camera, microphone or location access for a single session. The permission is revoked…

privacybeginner

It is less safe, and Android says so visibly. Verified boot reports an unlocked state (orange) and some apps refuse to r…

securitybootintermediate

Because the Binder driver enforces flow control on oneway transactions to prevent unbounded buffer growth. When the targ…

ipcnerd

In 2021 the US Supreme Court ruled that Google's use of Java API declarations in Android was fair use, ending a decade o…

historykotlinintermediate

Because they patch only the blocks that changed, rather than rewriting the whole partition. The catch is that they requi…

otabootnerd

Because a mutable PendingIntent lets the receiving app change the intent's contents, which can redirect a privileged act…

securityapp-componentsintermediate

Because the default used to depend on whether the component had an intent filter, and misreading it exposed components. …

securityapp-componentsintermediate

Groups mostly exist for the user interface: a request for any permission in the contacts group shows one contacts dialog…

securitypermissionsintermediate

It gives an app access to the specific photos a user selects, through a URI, without any media permission. The app canno…

privacystoragebeginner

With Play App Signing, Google does. The developer holds an upload key, and Google re-signs the artifact with the app sig…

securitypackagesintermediate

Because behaviour changes are gated on targetSdk, so an app that never targets a new level never gets its security and p…

evolutionsecurityintermediate

Android 17 adds APK Signature Scheme v3.2, which pairs a classical signature with an ML-DSA signature. An attacker with …

securitynerd

Predictive back runs the back navigation animation during the gesture, so the user can see where they are going before c…

uiinputintermediate

From data access auditing: the platform records camera, microphone and location accesses with timestamps and attributing…

privacynerd

Plain DNS queries are visible to the network and can be altered. Private DNS over TLS encrypts them, either opportunisti…

connectivitysecurityintermediate

Android 4.1 synchronised rendering to the display's vsync signal, added triple buffering, and introduced the Choreograph…

graphicsintermediate

Because shared pages — above all the framework classes inherited from Zygote — would be counted once per process in RSS,…

memorynerd

Resource IDs are packed into 32 bits: the package ID, the type ID and the entry ID. The package 0x7f is reserved for res…

packagesnerd

An app widget is rendered by the launcher or lock screen, not by your app, so your classes are not loaded in that proces…

notificationsuiintermediate

RenderScript was Android's compute API from Android 3.0, but driver support was inconsistent and the toolchain was hard …

graphicsnerd

Because every modem is different. The radio interface layer is a vendor implementation behind a HAL, and the details of …

connectivitynerd

Runtime resource overlays. An overlay APK supplies replacement resources for a target package, and the overlay manager a…

packagesnerd

Rust is used for new platform code in areas where memory safety matters, including parts of the Bluetooth stack and, thr…

securityintermediate

Android's SELinux policy applies to root too. A process running as root still lives in a domain, and the policy decides …

securitynerd

It was a one-release escape hatch in Android 10 that let apps keep the old broad storage model while supporting the rele…

storageintermediate

When Android devices shipped with real SD cards, /sdcard was a symlink to the removable volume. As internal storage grew…

storagebeginner

SELinux controls access to labelled objects; seccomp controls which system calls exist at all for a process. An app proc…

securitynerd

Android creates separate app domains such as untrusted_app, untrusted_app_25, untrusted_app_27 and so on, each with poli…

securitynerd

It names the source context, the target context, the object class and the permission that policy refused. It is the star…

securitydebuggingnerd

Enforcement started behind the scenes in Android 4.2 and 4.3 and became mandatory in Android 5.0. The phased rollout — p…

securityhistorynerd

Sensor batching. The sensor hardware buffers events and delivers them in batches when the app wakes or when a FIFO fills…

connectivitynerd

They are Binder service names registered with servicemanager. The framework's getSystemService calls resolve to these na…

system-serveripcintermediate

Android 8.0 made unknown sources a per-app permission rather than a global setting. Android 13 added restricted settings…

packagessecurityintermediate

v1 signed individual entries inside the ZIP, leaving parts of the archive unprotected — a weakness that enabled the Janu…

securitynerd

The API level identifies the platform interface, not the marketing version. Android 12L is Android 12 for large screens …

historybeginner

Because reading all SMS messages is one of the most abused permissions. Android 17 delays standard OTP access for three …

privacysecurityintermediate

Because the system started drawing a splash screen for every app, to avoid a blank window during cold start. Custom laun…

uiintermediate

It covers the gap between the moment the system knows an app is launching and the moment the app has drawn its first fra…

uiperformancebeginner

Because Play generates splits per ABI, screen density and language, and the device downloads only what it needs. A phone…

packagesintermediate

The 2015 media-framework vulnerabilities let a specially crafted file compromise a device during processing, often with …

securitymediaintermediate

Because they are supposed to be constant, and the runtime can optimise much more aggressively when it can rely on that. …

runtimenerd

Because the zygote is the one process every app descends from — a single point where the whole platform meets the code y…

aboutbeginner

Accidental main-thread work: disk reads, network calls, leaked cursors and unclosed resources. It is a debug tool, not a…

threadingdebuggingintermediate

A Surface is the producer end of a BufferQueue: a set of memory buffers that an app draws into, which a consumer — usual…

graphicsintermediate

SurfaceView has its own buffer queue and a separate layer, so it is cheap and can update independently of the view hiera…

graphicsuiintermediate

A barrier blocks synchronous messages from being delivered while letting asynchronous ones through. Choreographer uses i…

threadinggraphicsnerd

init notices the process died and restarts it. The kernel keeps running, but every framework service is gone, so the sys…

system-serverintermediate

Debug builds skip optimisation and shrinking, enable debugging hooks, and often run without a Baseline Profile. They can…

buildperformanceintermediate

It throttles. The platform reduces CPU and GPU performance, dims the display, and limits charging to stay within thermal…

batteryperformanceintermediate

The name refers to musical treble — the higher register — because the project raised the abstraction level between hardw…

hal-treblehistorybeginner

With two, the producer must wait when the consumer holds one and the other is still in flight, so a slow frame stalls th…

graphicsnerd

Keeping all platform work on one main branch and selecting behaviour at build time with release configurations and featu…

aosphistorynerd

Starting with Android 16, Google moved the major release to Q2 and added a second SDK release in Q4, while feature drops…

historybeginner

It keeps a set of pre-forked Zygote children ready so that launching an app only needs to specialise one rather than for…

runtimeperformancenerd

The v4 signature exists to support incremental installation: the device can verify chunks of the APK as they arrive, rat…

securitypackagesnerd

Green means the device is locked and everything verified. Yellow means the bootloader is locked but the OS is signed by …

securitybootintermediate

It puts every dependency and plugin version in one TOML file, so a build has a single source of truth for versions and t…

buildintermediate

It is one of the largest files in the framework — tens of thousands of lines covering measurement, layout, drawing, inpu…

Only what is written into the saved instance state bundle, plus anything the app persisted itself. A ViewModel survives …

app-architectureintermediate

Because the system image's compatibility matrix did not match the vendor manifest. VINTF checks at boot that the HAL ver…

hal-treblenerd

Virtual A/B creates the inactive slot as a copy-on-write snapshot rather than a full copy. After the device boots succes…

boototanerd

8.33 milliseconds. The budget is the refresh period: 16.67 ms at 60 Hz, 11.11 ms at 90 Hz and 8.33 ms at 120 Hz. It cove…

graphicsintermediate

With Android 7.0, as an alternative to OpenGL ES. It gives explicit control over the GPU with lower driver overhead, at …

graphicsnerd

It checks that key threads and services are making progress. If one is blocked for too long, it kills system_server, whi…

system-servernerd

Because it is a large attack surface — a full browser engine inside almost every app — and fixing it through OS updates …

securityhal-trebleintermediate

Widevine security levels. L1 keeps keys and decoding in a trusted environment and allows HD and 4K; L3 is software-only …

mediasecuritynerd

Android 12 added cross-window blur, letting an app blur what is behind its window, with a fallback when the device canno…

graphicsuinerd

Yes, through a work profile: a separate Android user managed by IT. Apps in the profile cannot see personal data and vic…

securityplatformbeginner

JobScheduler on modern Android, with an alarm-based fallback on very old versions. It adds persistence, constraints, cha…

backgroundintermediate

Because aligned uncompressed entries can be memory-mapped directly, without copying them into RAM. The platform relies o…

packagesbuildnerd

Zygote has already loaded the framework classes and resources when the device boots. When you launch an app, the system …

runtimeprocessesbeginner