;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Descarregando rápido demais? Saiba quais apps estão sugando sua bateria

invincible_bulldog/Getty Images/iStockphoto
Imagem: invincible_bulldog/Getty Images/iStockphoto

Lucas Santana

Colaboração para Tilt

21/03/2021 04h00

Luminosidade, uso de Bluetooth e geolocalização são alguns dos fatores que interferem no consumo da bateria do telefone, mas não estão sozinhos nessa. Os aplicativos instalados também podem consumir bastante energia, principalmente aqueles que ficam em espera rodando sem que tenhamos conhecimento.

Há muitos anos que ouvimos falar disso: se seu celular ficou lento, fechar aplicativos vai ajudá-lo a ganhar velocidade, poupando trabalho para o processador e a memória RAM e rendendo ganhos de bateria e dados de internet. Certo?

Tanto nos aparelhos Android quanto nos iPhones é possível identificar quais são os vilões da sua bateria. Uma ferramenta nativa mostra em detalhes quais apps estão abertos e qual porcentagem da bateria que cada um consome. Você ainda pode consultar por quanto tempo a carga vai durar em modo de espera ou em uso.

Tilt listou um o a o para ar a ferramenta em cada sistema operacional:

Android

O Android é um sistema operacional multiplataforma. Isso quer dizer que funciona em aparelhos de fabricantes diferentes, que podem modificar a aparência do sistema. Ainda assim, o caminho para chegar até a ferramenta de consumo de bateria é similar em todos eles.

Ressalva feita, vá no ícone de Configurações do seu Android. Você pode usar a lupinha que geralmente fica no canto superior e digitar "Bateria".

Bateria Android - entre em configurações - Reprodução  - Reprodução
Imagem: Reprodução

Toque na opção e busque por "Uso da bateria" ou opção semelhante. Lá, você vai encontrar todos os aplicativos que estão consumindo bateria do seu smartphone.

Bateria Android - entre em uso da bateria  - Reprodução - Reprodução
Imagem: Reprodução

Tocando no app, você encontrará informações como a porcentagem de uso da bateria e quanto tempo ele está sendo usado. Além disso, é possível suspender o seu uso.

Bateria Android - suspender uso de app  - Reprodução - Reprodução
Imagem: Reprodução

iOS

Se você tiver com última versão do sistema operacional da Apple instalado, siga os seguintes os.

A partir da tela inicial, procure o ícone de Ajustes e toque na opção Bateria.

Bateria iOS - toque em Bateria - Reprodução - Reprodução
Imagem: Reprodução

Na tela que abrir, você pode ver como cada app está consumindo sua bateria, clicando em "Mostrar atividade".

Bateria iOS - apps que estão consumindo bateria - Reprodução - Reprodução
Imagem: Reprodução

Os principais sugadores da bateria

No ranking dos mais "custosos" ao consumidor, despontam todos aqueles que gastam bateria e dados ao mesmo tempo. Os apps de mensagem instantânea, como Facebook Messenger e WhatsApp, são dos piores, nesse sentido. Mas Google, YouTube e Office 365 também pesam.