[Off-Topic] Entendendo melhor o tal "multitasking" do iPhone OS 4

2010 May 05, 02:27 h

Até agora eu não havia entendido como que o iPhone OS 4 iria conseguir efetivamente fazer multitasking (multitarefa). Para não consumir bateria eu imaginava que algo como um sinal de SUSPEND seria enviado ao processo para que ele suspendesse as atividades enquanto permanecesse em background, daí quando você escolhesse ele de novo na barra de processos em execução ele voltaria a “acordar”. Se o aplicativo precisasse executar alguma coisa enquanto estivesse suspenso, ele enfileiraria uma tarefa assíncrona que o sistema operacional se encarregaria de executar, enquanto o aplicativo em si permaneceria suspenso no fundo.

Só que isso não explica como o sistema conseguiria economizar a quantidade limitada de RAM, pois mesmo suspenso um processo continuaria a consumir memória para permanecer aberto. Eu imaginava que uma forma seria serializar o estado atual da memória, fazer um “dump” num arquivo e quando o aplicativo reabrir ele poderia recarregar esse estado gravado. Mas isso seria complicado e não necessariamente confiável, por exemplo, se em memória houvesse ponteiros para recursos de I/O como sockets ou arquivos.

Simplesmente manter os aplicativos suspensos em memória não é viável porque rapidamente a memória RAM seria consumida. O sistema operacional precisaria ficar fazendo “faxina” o tempo todo matando aplicativos mais velhos para que outros possam ser abertos, mas nem isso é perfeito e de tempos em tempos a própria atividade de coletar o lixo poderia deixar o sistema com sensação de “lento”.

Mas agora acho que eu entendi melhor. A Apple parece ter ido mesmo pelo caminho mais pragmático e simples. Os aplicativos, na realidade, fecham normalmente, como antes. Ou seja, se você aperta a tecla “Home” e ativa outro aplicativo, o anterior, essencialmente morreu. Mesmo a nova barra que parece ser de “aplicativos suspensos em background” na realidade é apenas uma barra de “aplicativos recentemente usados, mas já desligados”. O que acontece é que se um aplicativo precisa executar alguma coisa mesmo depois de ter sido fechado, ele precisa registrar uma tarefa em uma das filas do sistema operacional, como de som, de voz, de localização. Quando a tarefa precisa da intervenção do usuário, por exemplo com uma notificação, ele reabre o aplicativo que fora fechado e a impressão é que ele estava lá o tempo todo aberto.

No Beta 3, com um boot limpo, o sistema começa com aproximadamente 120Mb livre no meu 3GS. Se eu abrir aplicativos como o Safari, Mail, iPod, Phone, Google Maps, Preferences, etc e a memória livre cai para 12Mb. Mas se eu abrir outros como Twitterific, Instapaper, Google Earth, etc, a memória livre continua por volta dos mesmos 12Mb. A razão para isso é que, assim como nos iPhone OS 3.2 ou inferior, alguns aplicativos da própria Apple de fato permanecem abertos em background, consumindo memória, mas qualquer aplicativo de terceiros é fechado quando se muda de aplicativo. Depois de abrir mais alguns aplicativos vi que de 12Mb subiu para uns 30Mb de memória livre embora eu não tenha notado nenhum aplicativo aberto primeiro tendo fechado, mas algum tipo de reorganização o sistema está fazendo.

O que pode dar a sensação de que o aplicativo estava aberto é que eles deveriam ser codificados para identificar o sinal de fechamento, guardar algumas informações relevantes do estado do aplicativo e depois recarregá-lo. Por exemplo, se no Twitterific eu estiver digitando uma mensagem e fechá-lo, quando eu reabro a mensagem continua lá para eu poder continuar digitando. Mas o que acontece é que ele grava isso e depois recarrega e não que o aplicativo fica aberto. Agora, para aplicativos como Pandora, Skype ou TomTom, ele terão a opção de registrar uma tarefa faceless, sem interface gráfica, com uma dos serviços do sistema operacional que será capaz de reabrir o aplicativo caso precise da interface gráfica.

É como as coisas já funcionavam com o sistema de Push Notification: o iPhone fica escutando mensagens que poderiam ativar a reabertura de uma aplicação, passando dados a ele para que ele já abra em uma tela adequada. Por isso o Scott Forstall mencionou “Local Notifications”, o serviço de Voz do sistema operacional poderá enviar uma mensagem no mesmo formado da mensagem remota do Push Notification para acordar um aplicativo.

Todos os aplicativos nativos da Apple ficam abertos de fato em background, incluindo os widgets de Weather e Stocks, ou Notes e Calculator. Acho que essa possibilidade não existe para aplicativos de terceiros, que precisarão usar os serviços do sistema e notifications e a boa prática de não gravar muita coisa ao sair do aplicativo e nem de demorar muito para recarregar ao reabrir, para dar a “ilusão” de que o aplicativo continuou sempre aberto, magicamente.

Novas Funcionalidades

No Beta 3 que acabou de sair, a única coisa interessante mesmo é o que foi reportado sobre os controles de iPod e o botão de travar o rotacionamento da tela. Basta dar duplo clique no botão “Home” para trazer a barra de aplicativos recentes e arrastar para a direita para que ele mostre os controles. Útil e simples.

Outra coisa que nem é mais novidade é a funcionalidade de criar pastas. Isso sim é muito útil e eu nem tenho tanta aplicação assim. Como já foi mostrado inúmeras vezes, basta arrastar um aplicativo em cima do outro e ele automaticamente cria o nome da pasta baseado na categoria do aplicativo. O resto é intuitivo: arraste um aplicativo numa pasta já existente para acrescentar, ou abra a pasta e arraste o aplicativo para fora para retirar. Cada pasta pode ter no máximo 12 aplicativos. Isso deve ser suficiente, pelo menos para os próximos meses.



A coisa mais útil no caso do aplicativo de Mail é poder ver em threads. Isso tem no Mail.app do Mac e faltava no de iPhone. Agora as conversas ficam mais organizadas e é bem mais simples de ler. Eu não uso mais de um e-mail (o meu do Gmail redireciona para o do Mobile Me) então não testei o Inbox unificado.

Se quiser ver tudo que tem no novo iPhone OS 4, assista a apresentação no próprio site da Apple. Esta atualização será bem importante. No mais, eu só notei uma micro-demora quando você acorda o iPhone ele fica escuro por um milésimo de segundo mas dá para notar. Um aplicativo que começou a dar crash foi o do LinkedIn, em alguns dos seus ítens. Não testei todos mas a maioria dos outros aplicativos está funcionando.

A coisa mais chata até este Beta 3 é que meu iTunes não está conseguindo fazer backup do iPhone quando ele se conecta. Ele faz o sync mas não o backup. Parece que outros estão experimentando o mesmo problema. Possivelmente será necessário uma nova versão de iTunes, não sabemos ainda. Mas, é o custo de viver perigosamente no Beta. Felizmente posso dizer que mesmo sendo um Beta, a grande maioria das coisas está funcionando bem.

Mas infelizmente, como falei acima, a funcionalidade de “multitasking” não é – até agora pelo menos – um verdadeiro “multitasking” mas sim um mecanismo de “fast-switching” de aplicativos. Só será realmente vantajoso quando os desenvolvedores começarem a codificar suporte aos serviços do sistema operacional e mesmo assim somente para categorias de aplicativos que usarão música, voz, localização, notificações push e locais, tarefas assíncronas.

tags: obsolete apple

Comments

comentários deste blog disponibilizados por Disqus