# The 120Hz Trap: Debugging Infinite Recomposition and Silent Deep Link Failures on ColorOS

How high refresh rates and deep link failures were resolved.

- **Source:** [ProAndroidDev - Medium](https://brifing.si/source/d9553fa9-7b72-4b9b-bc73-c6bf9a40dd5f)
- **Published:** 2026-07-17
- **Topic:** [Software & Engineering](https://brifing.si/c/engineering)
- **Original article:** <https://proandroiddev.com/the-120hz-trap-debugging-infinite-recomposition-and-silent-deep-link-failures-on-coloros-bceb3a320e11?source=rss----c72404660798---4>
- **On Brifing:** https://brifing.si/s/622b9994-195c-467f-8c99-acedc4fbfffd

## Introduction

As Android developers transition to declarative UIs with Jetpack Compose, device-specific quirks can expose hidden bugs in 'stable' code. A critical incident on the Oppo F31 Pro 5G exemplified this.

## 120Hz and the Recomposition Loop

The Oppo F31 Pro's 120Hz display ruthlessly exposed state management mistakes in Compose. Code that ran smoothly on 60Hz devices caused severe flickering and infinite loading states at 120Hz.

## Cause of the Recomposition Loop

High refresh rate displays don't create recomposition bugs. Writing to MutableState during the composition phase does. This loop exists on 60Hz devices too, but is less noticeable.

## Solution: State Mutations

The bug was fixed by moving state mutations out of direct @Composable scope into lifecycle-aware blocks. This broke the recomposition loop and ensured smooth screen operation.

## Deep Link Failure

On the Oppo F31 Pro, the 'Pay Now' deep link died silently. Clicking it did nothing, and the page got stuck. This issue was caused by package visibility filtering introduced in Android 11.

## Package Visibility Filtering

Since Android 11, apps can no longer see the full list of installed packages. Without a queries block in the manifest, resolveActivity() calls return null, preventing the target app from launching.

## Solution and Conclusion

The issue was resolved by declaring a queries block in the manifest and making intent routing genuinely defensive. This ensured deep links worked reliably.

## Sources covering this story

- https://proandroiddev.com/the-120hz-trap-debugging-infinite-recomposition-and-silent-deep-link-failures-on-coloros-bceb3a320e11?source=rss----c72404660798---4 — 

---

_Summary written by Brifing from the original reporting. Copyright in the original article belongs to its publisher; read the full piece at the link above._
