60fps é uma taxa de 60 quadros por segundo, onde cada quadro leva exatamente 16.7 ms, proporcionando um movimento visualmente suave. De acordo com o Android Game Optimization Guide, 60 FPS estáveis são considerados o padrão mínimo para animação confortável em aplicações móveis. 16.7 ms é o orçamento de tempo para renderizar um único quadro que o desenvolvedor deve cumprir para alcançar 60 FPS.
Principais pontos
60fps (60 quadros por segundo, frames per second) é uma medida da taxa de quadros na qual o display atualiza a imagem 60 vezes a cada segundo. O olho humano para de distinguir quadros discretos aproximadamente a 50–60 Hz devido ao efeito de persistência da visão, tornando 60fps um limiar natural de suavidade para a maioria dos utilizadores.
Cada quadro a 60fps tem um orçamento de tempo fixo de 16.67 ms. Este orçamento inclui tudo: desde o processamento da entrada do utilizador até à renderização e saída no ecrã. Se qualquer operação — física, animação, renderização de uma cena complexa — exceder este limite, a taxa de quadros cai para 30fps ou menos, o que é percebido visualmente como gaguejo.
No desenvolvimento móvel, 60fps foi durante muito tempo o limite devido a restrições de hardware: a maioria dos ecrãs antes de 2017 funcionava a 60 Hz. Com o aparecimento de ecrãs de 90 Hz e 120 Hz, 60fps tornou-se o padrão mínimo, em vez do objetivo superior. No entanto, para aplicações de UI, vídeo e a maioria dos jogos casuais, 60fps continua a ser o indicador alvo de desempenho.
60 Hz é a frequência da corrente alternada nas redes elétricas dos EUA e do Japão, que historicamente determinou a taxa de atualização dos primeiros padrões de televisão NTSC. O padrão PAL usava 50 Hz devido à rede europeia de 50 Hz. Esta inércia histórica passou para os monitores de computador e posteriormente para os ecrãs móveis.
O efeito de persistência é uma propriedade da visão humana que retém uma imagem na retina durante aproximadamente 30–50 ms após o estímulo desaparecer. A 60fps, um novo quadro chega a cada 16.7 ms — antes de o traço persistente do anterior desaparecer, criando a ilusão de movimento contínuo. Estudos da Universidade de Cardiff (2023) mostram que pilotos de caça conseguem distinguir um quadro individual a 220 Hz, mas para o utilizador comum, a diferença entre 60 e 120 Hz é muito menos percetível do que entre 30 e 60 Hz.
Apple estabeleceu 60fps como padrão para iOS em 2007 com o primeiro iPhone e manteve-o até ao iPhone 13 Pro (2021). Android seguiu historicamente o mesmo padrão, embora os primeiros dispositivos com 90 Hz (OnePlus 7 Pro, 2019) e 120 Hz (Razer Phone, 2017) tenham aparecido mais cedo. Hoje, 60fps é o limiar mínimo para passar na revisão da App Store e Google Play para aplicações com animação, embora os requisitos formais não estejam documentados.
A medição de FPS é o primeiro passo da otimização. Sem métricas objetivas, é impossível determinar onde o desempenho está a ser perdido. As plataformas móveis fornecem ferramentas de perfilamento integradas e APIs de software para medir a taxa de quadros em tempo real.
Android Studio Profiler e Xcode Instruments são as principais ferramentas para analisar FPS. O Android Profiler mostra GPU Render Time, Frame Rate e Jank (número de quadros perdidos). O Xcode Instruments inclui o modelo Core Animation, que exibe a taxa de quadros, o tempo de renderização e o número de draw calls. Para motores de jogo, Unity Profiler e Unreal Insights fornecem decomposições detalhadas do tempo por módulo.
// Android — medição de FPS através de FrameMetrics
window.addOnFrameMetricsAvailableListener(
{ _, frameMetrics ->
val duration = frameMetrics[FrameMetrics.TOTAL_DURATION]
val fps = 1000f / (duration / 1_000_000f)
Log.d("FPS", "Frame duration: ${duration / 1_000_000} ms, FPS: $fps")
},
Handler(Looper.getMainLooper())
)
CADisplayLink no iOS e Choreographer no Android são mecanismos do sistema que sincronizam a renderização com a taxa de atualização do ecrã. O CADisplayLink chama um método a cada novo quadro, passando um timestamp para cálculo do atraso. O Choreographer no Android faz o mesmo, mas suporta callbacks para diferentes fases do quadro: entrada, animação, travessia, renderização. O desenvolvedor pode subscrever o Choreographer.FrameCallback e medir o tempo entre quadros.
60fps estáveis significa que nenhum quadro excede o orçamento de 16.7 ms. Mesmo um quadro longo por segundo cria um gaguejo notável. A otimização divide-se em três níveis: CPU, GPU e memória. Cada um deles pode tornar-se um gargalo.
O passo de layout é um dos principais consumidores de tempo de CPU no Android e iOS. Hierarquias complexas de View, ConstraintLayouts aninhados e drawables pesados criam longas cadeias de measure e layout. Para aplicações de UI, use uma hierarquia plana de View (profundidade não superior a 3–4 níveis), substitua RecyclerViews aninhados por ConcatAdapter e, para listas no iOS, use compositional layout com prefetching.
| Operação | Tempo típico | Impacto quando excedido |
|---|---|---|
| Layout | 1–3 ms | Gaguejo em ecrãs complexos |
| Draw | 2–8 ms | Redesenho, queda de quadros |
| GPU Render | 3–10 ms | Queda de FPS para metade |
| GC (coleta de lixo) | 2–50 ms | Microgaguejos percetíveis ao olho |
Overdraw é a renderização repetida dos mesmos pixels. Cada camada de View, fundo ou imagem sob um elemento transparente aumenta o número de operações de pixel. No Android, use Debug GPU Overdraw nas Developer Options; no iOS — Xcode Debug View Hierarchy. Reduza o overdraw removendo fundos desnecessários e usando flags opacas: no Android — @drawable com android:opaque, no iOS — isOpaque = true para UIKit.View.
Draw calls são o número de comandos de renderização enviados para a GPU. As GPUs móveis modernas lidam com 200–400 draw calls por quadro a 60fps. Exceder este número causa quedas de desempenho. Combine sprites em atlas de texturas, use batching e evite a renderização individual de cada elemento através de um draw call separado.
Os congelamentos por GC são uma das principais causas de FPS instável em aplicações JVM e Kotlin. A coleta de lixo no Android pode levar até 30–50 ms, fazendo com que 2–3 quadros consecutivos sejam saltados. Evite alocações em loops de animação, use pools de objetos e pré-aloque memória. No iOS, o problema é menos crítico devido ao ARC, mas ciclos de retenção e transbordamentos da autorelease pool também criam microgaguejos.
Para jogos, 60fps não é apenas um padrão, mas uma vantagem competitiva. Estudos da Newzoo (2024) mostram que jogos com FPS instável abaixo de 60 recebem 40% mais avaliações negativas na Google Play. Unity e Unreal Engine fornecem perfiladores integrados para monitorizar o tempo de renderização: no Unity é o Frame Debugger, no Unreal — GPU Visualizer, que mostram o tempo exato de cada draw call e shader. 60fps estáveis são especialmente importantes para jogos de ação, onde cada quadro perdido pode custar ao utilizador a conclusão de um nível.
Ecrãs de 90 Hz e 120 Hz estão a mudar o patamar de desempenho alvo. Para aplicações que funcionam em dispositivos ProMotion, o FPS alvo pode ser 120 e o orçamento de quadro reduz-se para 8.3 ms. Isto requer um código duas vezes mais eficiente, especialmente em draw calls e renderização GPU.
A vantagem das altas frequências não é apenas a suavidade: 120fps reduz o atraso de entrada percetível em 8–10 ms, o que é crítico para jogos e aplicações interativas. No entanto, a diferença entre 60 e 120fps requer uma abordagem individual: para aplicações de UI (scroll, animações), 90fps pode ser um compromisso ideal entre suavidade e consumo de energia, pois renderizar 120 quadros por segundo consome 30–40% mais energia do que 60.
A Apple fornece uma API para selecionar a frequência preferida: preferredFramesPerSecond no CADisplayLink. O Android antes da API 30 não dava controlo direto sobre a frequência, mas a partir do Android 12, o desenvolvedor pode definir o RefreshRate através do WindowManager, solicitando 60, 90 ou 120 Hz dependendo do tipo de conteúdo.
Perguntas frequentes
30fps é percebido como tremores durante o scroll e animações porque cada quadro dura 33.3 ms e o olho consegue notar a descontinuidade. 60fps fornece um quadro a cada 16.7 ms — abaixo do limiar de persistência da visão para a maioria dos utilizadores.
Use um perfilador (Android Profiler, Xcode Instruments) e veja o histograma de frame time. Se 90%+ dos quadros se encaixam em 16.7 ms sem picos — o FPS está estável. Picos isolados até 30–50 ms criam gaguejo notável.
Sim, mas requer otimização agressiva: baixa resolução de renderização, shaders simples, mínimo de draw calls, evitar transparência e sombras complexas. Teste em dispositivos de gama baixa — eles mostrarão o desempenho real.
Devido ao mecanismo de VSync: se a GPU não conseguir completar um quadro em 16.7 ms, perde o VBlank e mantém o quadro atual por mais 16.7 ms. Efetivamente, um quadro é exibido por dois ciclos de atualização e o FPS cai exatamente para metade.
Sim. Mesmo o simples scroll de listas e animações de transição requerem 60fps para uma experiência confortável. Os utilizadores notam instantaneamente o atraso ao deslizar e isso reduz a classificação da aplicação em 2–3 vezes em testes subjetivos.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também