Mobile app loading states
10 Mobile App Loading State Examples: Progress, Processing, and Waiting
A loading state should identify the task in progress, preserve the user's input, and make completion, cancellation, background work, and failure predictable.
Waiting is a product state, not a gap between two designed screens. The user may wonder whether the tap registered, whether the app needs to remain open, whether uploaded data is safe, how long the task might take, and what happens if the connection disappears. The interface should answer the questions that matter for that operation.
Use a skeleton when the layout is known and content is arriving soon. Use an indeterminate indicator when duration is unknown. Use determinate progress only when the system can measure real completed work. For longer generation, upload, or analysis, name stages, allow safe backgrounding when supported, and keep a durable route to the eventual result.
The recorded screens below show visible loading treatments in real mobile apps. They help compare wording, hierarchy, and status presentation. They do not prove that the stated percentages correspond to real processing or that one style reduces abandonment. Product teams must connect the interface to truthful backend state and measure the complete task.
01. Name the work
Tell users which result the system is preparing.
A specific task label reassures more effectively than a spinner floating over an unrelated screen.
Heart Beat says Preparing Results and Analyzing your measurement results above a horizontal progress bar. The wording ties the wait to the heart-rate measurement that preceded it. If the measurement is already safely stored, the app can say so. If leaving would interrupt analysis, that consequence needs to be visible before the user backgrounds the app.
Hair Snap says Finalizing results and explains that it is compiling analysis and re-checking abnormalities. This stage language is more informative than Loading, but health-related wording must remain accurate and avoid implying clinical certainty the product cannot provide. The eventual result should state its evidence limits and offer a recovery route when image quality is insufficient.
Keep the object stable from submit through result. Say Preparing your heart-rate result, uploading your photo, or generating your workout plan. Do not rotate vague messages merely to make time feel occupied. If a stage label changes, it should reflect a real transition the system can resume or diagnose.


02. Staged progress
Use task lists when each completed stage is real and useful.
Named subtasks can show advancement through a long operation, but fictional checkmarks weaken trust.
Clay lists Analysing your preferences, Processing your media, Finding the perfect templates, and Loading templates for you. Completed checkmarks and one active indicator create a readable sequence. This pattern works when the backend can report durable stage completion and a retry can resume at the correct boundary.
OakWell shows Analyzing key health metrics, Reviewing recent trends and patterns, and Generating actionable insights and early alerts below a progress bar. The list explains why health-profile creation takes time. Claims such as early alerts should match the product's actual capability and the result screen should distinguish generated interpretation from measured source data.
Do not mark tasks complete on a timer. Derive status from server events or verified local work. If stages can run in parallel, avoid a false serial story. When one fails, identify the failed unit, preserve completed work, and offer a retry that does not repeat expensive uploads or duplicate consumption-based charges.


03. Percentages
Reserve percentages for progress the system can actually measure.
A number creates a strong expectation that every increase represents completed work and that 100 percent means the next state is ready.
Symmetry shows 100 percent above Generating your plan and a list of profile analysis, intensity adjustment, and finalization tasks. Once the indicator reaches 100, the app should transition or explain the remaining step. Leaving a full bar on screen while unknown work continues makes the metric feel simulated.
Tone AI also shows 100 percent and Finalizing your program beneath a full circular and horizontal indicator. If finalization is still active, the measurable generation phase and the unmeasured handoff should be represented separately. A completed calculation does not necessarily mean the result is stored, synchronized, and ready to open.
Calculate progress from completed units with known total weight. Smooth visual interpolation can make updates feel less abrupt, but it must not run ahead of the source state. If work can expand dynamically, use named stages or an indeterminate indicator. Never decrease progress silently after discovering more work.


04. Unknown duration
When duration is unknown, clarify behavior instead of inventing precision.
An indeterminate state can be honest if the interface says what is happening and what the user may safely do.
Well AI uses a spinner and the single word Analyzing. The minimal state confirms activity, but it leaves practical questions unanswered for a task that may take more than a moment. Add the analyzed object and, when relevant, whether the user can leave, cancel, or expect a notification.
Brainrot rotates through Analyzing your habits, Calculating your profile, and Generating insights. These messages describe a personalization pipeline without a numeric promise. They should change only when real work changes, and the product should avoid restating sensitive answers in a way that could be seen on a shared device.
Set a threshold before showing a blocking loader so very fast requests do not cause flicker. For longer waits, reveal elapsed context, safe background behavior, and cancellation. If the operation exceeds its expected window, move to a delayed state rather than looping the same animation indefinitely.


05. Completion and handoff
Make the transition from processing to ready unmistakable.
The result should appear only after its data is usable, and 100 percent should not coexist with copy that says analysis is still underway.
Mogged displays 100 percent, Analysis Complete, and a second line saying it is analyzing results and processing assessment data. The conflicting messages illustrate a common state problem. Completion, finalization, and result readiness need separate labels or one authoritative status.
AI Calorie Counter shows Preparing your program at 100 percent with Estimating your metabolic age and Finalizing results. If the finalization work remains active, the interface should keep the determinate phase below 100 or switch clearly to a brief final handoff. The next screen should preserve the inputs that produced the program and allow correction.
Define ready through durable backend state, not a client animation callback. Store the result, verify access, and make the destination retrievable before navigating. If navigation fails, keep a result-ready state with Open result rather than restarting the computation. If processing fails after partial completion, explain whether credits, uploads, and prior inputs remain available.


Implementation
Build loading UI from the operation's durable state.
The client should observe a task model that survives interruption instead of guessing progress from elapsed time.
Give long-running work an operation identifier, owner, input reference, state, stage, measurable completed units, total units when known, created time, updated time, cancel capability, result destination, and error category. Submit idempotently so repeated taps cannot start duplicate uploads, generations, purchases, or analyses.
Represent queued, starting, uploading, processing, delayed, finalizing, ready, canceled, failed, and expired states separately. Persist inputs before expensive work begins. Poll with backoff, subscribe to server events, or refresh on app activation. Reconnect to the same operation after relaunch rather than starting over.
Use skeletons for known layouts and short content retrieval, while keeping existing data visible during small refreshes. Use determinate progress only from reliable units. If work continues in the background, say so and provide a stable job or notification destination. Cancellation should explain what stops, what remains saved, and whether consumed resources are refundable.
Announce status changes without reading every percentage increment. Give the indicator an accessible task label, expose a reduced-motion state, maintain contrast, and keep cancel or back reachable with large text. On failure, preserve inputs and completed work, name the failed operation, and offer safe retry, edit, save, or support routes.
One operation
Use an idempotent job identifier that survives retries, backgrounding, and relaunch.
Truthful units
Show percentages only when completed work and total work are known.
Preserved input
Keep uploads, answers, selections, and completed stages safe through interruption.
Durable result
Navigate only after the result is stored, accessible, and reopenable.
Measurement
Measure the completed task and the quality of the wait.
A shorter animation is not an improvement if more jobs fail, duplicate, or deliver an inaccessible result.
Track operation start, queue time, upload time, processing stages, backgrounding, cancellation, retries, failure category, ready state, result open, and downstream completion. Measure real server duration separately from perceived wait and UI transition time. Compare stated percentages and stage events against source truth to detect stalled or premature completion.
Guardrails include duplicate operations, lost uploads, abandoned ready results, incorrect credit consumption, repeated retries, app termination, battery or data cost, and accessibility announcement volume. Segment by task type and network condition because a skeleton for a short list refresh and a minute-long generated plan require different expectations.
Review checklist
Test the wait from submission through return.
Review fast, slow, delayed, backgrounded, canceled, failed, retried, completed, and reopened operations.
Use large inputs, slow networks, server restarts, duplicated taps, app termination, permission loss, low storage, and a result that becomes unavailable before navigation.
- The loading state names the object or result being prepared.
- Skeleton, indeterminate, determinate, and staged progress are used for the right duration model.
- Percentages come from real completed units and 100 percent means the result is ready.
- Stage checkmarks reflect durable completion rather than elapsed timers.
- The screen explains whether the app may be closed or the task continues in the background.
- Inputs, uploads, selections, and completed work survive safe retry and relaunch.
- Cancellation states what stops, what remains, and whether consumed resources are affected.
- Delayed and failed states replace an endless loop with retry, edit, save, or support.
- Status changes are accessible without announcing every visual percentage update.
- The ready result is stored, authorized, reopenable, and connected to the original input.
Questions and answers
Mobile app loading state questions
When should an app use a skeleton screen?
Use a skeleton when the destination layout is known and content is expected soon. Keep existing content visible for small refreshes. Do not use generic skeleton blocks for long-running uploads, generation, or analysis that need task-specific status.
When should loading show a percentage?
Show a percentage only when the system knows completed work and total work well enough to calculate real progress. If total work can change, use named stages or an indeterminate indicator instead.
What should loading copy say?
Name the object or result, describe a real current stage when useful, and explain whether the user can leave, cancel, or expect a notification. Avoid rotating vague messages that are unrelated to actual processing.
What should happen at 100 percent?
Transition to a durable ready result or clearly separate a completed measurable phase from a brief final handoff. Do not show 100 percent while continuing an unknown amount of work under contradictory copy.
Should users be able to cancel loading?
Offer cancellation for long or expensive operations when the backend can stop safely. Explain what happens to uploads, partial work, credits, and the ability to resume. Keep cancellation distinct from merely closing the screen.
How should loading failures recover?
Preserve the original input and completed work, identify the failed operation, and retry idempotently. Offer edit, save, back, or support when repeating the same request is unlikely to help.
2,622 apps in the top charts.Ask them anything.
Compare recorded loading screens and surrounding flows to see how real apps explain processing, progress, finalization, background work, and the handoff to a result.