Já comecei o artigo colocando um título bem polêmico, mas que reflete exatamente o que eu penso a respeito da multitarefa que a Apple desenvolveu para o iOS 4 (finado iPhoneOS). Nesse post eu vou explicar porque isso que a Apple fez é apenas um paliativo e não resolve a maioria dos casos. Vamos a ele..
Primeiramente, vamos explicar algo básico para o entendimento do caso, mas que talvez, muitos usuários leigos não saibam. O iOS, o sistema operacional que roda no iPhone, iPod Touch e iPad, é derivado de um UNIX. Por padrão, sistemas UNIX suportam multitarefa, ou seja, cada programa que você abre, gera um processo pra ser tratado pelo sistema, consumindo ciclos de CPU, espaço em memória RAM, etc. No caso do iOS, a Apple decidiu fazer o seguinte: quando você bate o dedo no botão home, o sistema operacional dá uma espécie de grito ao App que você tava executando: ‘Amigão, o usuário quer usar outra coisa. Você tem 5 segundos pra executar seus procedimentos de encerramento (salvando o que precisa ser salvo), senão eu vou te matar (encerrar o processo)’. Diante desse ultimato, o App sai executando as rotinas que o programador configurou para o encerramento, apesar de, no exato momento que você clicou no home, o iPhone já ter ido pra ter inicial. Porém, em pano de fundo, o App que você estava, corre contra o tempo, tentando executar tudo que era necessário.
Vocês já devem ter percebido que alguns Apps são melhores que outros no tratamento do encerramento, correto? Alguns poucos Apps, muito bem escritos pelos seus desenvolvedores, salvam tanta informação quando encerramos, que, ao voltar pro App, parece que ele nem foi encerrado, pois ele volta quase no ponto exato de onde saímos da última vez. Porém, a enorme maioria dos Apps, ou salva pouca coisa ou nem salva, deixando a impressão que o programa foi realmente encerrado abruptamente e ao ser iniciado novamente, começou tudo do zero. Isso, não é culpa da Apple. Isso, é culpa de desenvolvedores ‘porcos’.
A esse ponto, muitos devem estar se perguntando: mas se o iOS é baseado em UNIX e já roda multitarefa por padrão, porque só agora, 4 anos depois, a Apple foi liberar a multitarefa? Bom, a Apple tem uma preocupação enorme do que vão dizer da plataforma dela e da famosa experiência de uso. Se ela simplesmente deixasse todos os Apps rodando em multitarefa, como era o padrão do Windows Mobile no passado, ia acabar tudo fica muito lento e o usuário leigo, sem saber o que se passava, iria acabar, invariavelmente, pondo a culpa na Apple, dizendo que o sistema é uma B&¨#! e tudo o mais. Por isso, quando você clica no botão home, ela dá 5 segundos pro App efetuar rotinas de encerramento e o ‘chuta’ do processamento, liberando praticamente toda CPU e RAM pro novo App que você irá abrir, fazendo com que não haja uma competição por recursos, que podem ser escassos, principalmente em iPhones mais antigos.
Os mais Geeks já devem ter ouvido sobre o tal Backgrounder e Kirikae. Esses programas são usados para habilitar a multitarefa em iPhones/ iPad jailbroken. Aliás, são os que eu uso há tempos e gosto muito. O backgrounder serve pra ‘enganar’ o sistema operacional, evitando que ele ‘chute’ o App que você acabou de sair. Já o kirikae, através de uma interface simples, permite que você comute entre os Apps rodando em multitarefa. Bom, mas se eles permitem que o App não seja encerrado, quer dizer que ele fica rodando no sistema, consumindo bateria, CPU, memória, etc.? Exatamente! E foi por isso que a Apple criou a sua forma de fazer multitarefa.
Como todos os usuários de iPhone devem estar carecas de saber, a autonomia de bateria do gadget é sempre um problemão e a Apple não quis piorar isso, habilitando o recurso de multitarefa real. Assim, depois de 4 anos ‘matutando’ como isso poderia ser feito, ela lança, no iOS 4, 7 APIs para o SDK, onde os desenvolvedores podem adaptar seus programas, fazendo-os rodar em multitarefa. Mas não é bem uma multitarefa de verdade, caso contrário, daria no mesmo problema, do App ficar rodando e consumindo recursos.
Lembram quando eu disse que ao clicar no home, o sistema operacional dá um ultimato pro App que estava rodando, fazendo-o salvar o status e fechar em até 5 segundos? Bom, depois disso, ele morre ou é morto (pelo iOS). O que a Apple fez foi deixar 7 processos que nunca vão morrer, sendo cada um deles pra um ‘departamento’ diferente. No caso da API de streaming de áudio, você está lá no Pandora ou LastFM, curtindo o som e fecha o App. Antigamente, o streaming parava e o App era encerrado. Agora, existe a possibilidade do Pandora, quando estiver encerrando, ‘passar a bola’ pra API que cuida desse ‘departamento’, dizendo algo assim: “eu tô encerrando, mas você precisa cuidar disso aqui pra mim. O endereço do streaming é esse, continue a reproduzir esse arquivo”. Assim como acontece com o streaming, existem outros 6 departamentos e só. Infelizmente, eles não cobrem tudo que o usuário precisa no uso diário.
Ao longo desses anos, em que a Apple não permitiu multitarefa, ela tentou contornar o problema usando a tecnologia de notificações push. Bom, isso é muito eficiente em vários casos, mas completamente inútil em outras, assim como essa ‘nova’ multitarefa do iOS 4. O assunto é complicado, então vamos a alguns exemplos pra facilitar.
Tem certos Apps, especialmente comunicadores instantâneos (Beejive, IM+, Skype, Fring, etc.), redes sociais (Twitter, Facebook, etc.) em que deixar um App rodando nativamente, 24hs por dia, consumindo recursos do sistema, seria desnecessário. Nesse caso, a tecnologia push faz todo sentido! O App fica fechado, sem consumir nada e quando chega alguma coisa pra você, o servidor da Apple envia uma notificação pro aparelho, que ‘acorda’ e lhe avisa. Ou seja, faz todo o sentido do mundo, né? Ponto pra Apple!
Por outro lado, notificações não resolvem em muitos casos, especialmente pra pessoas hiperativas como eu. Imagina que você está deitão no sofá, verificando seu Twitter. Ae, no marasmo, você resolve checar seus feeds. No meio dos feeds, tem uma notícia interessante, que leva pra um vídeo do Youtube. Enquanto o vídeo carrega, você simplesmente espera? Eu, definitivamente, não! Eu abro a multitarefa do backgrounder e vou ler outros feeds, puxar meus emails, trocar o podcast que estou ouvindo, etc. Nesse caso, eu quero que, quando eu comuto entre os Apps, ele volte exatamente onde estavam quando eu fui pra outro, assim como é no computador.
Até onde eu vejo as coisas, existe espaço pros 3 tipos de multitarefa. É extremamente errado dizer isso, mas pra facilitar a explicação, me darei essa permissão. No caso do Push, alguns Apps funcionam perfeitamente. No caso da multitarefa real, vejo mais pra um uso rápido, quando estamos realmente usando o aparelho. Não foi feito pra deixar um App rodando quando o aparelho está em stand-by. Já no caso da multitarefa proposta pela App, ela simplesmente não funciona bem pra quase nada, se limitando a casos muito específicos.
No mais recente keynote da Apple, na WWDC, Jobs nos disse que existem mais de 225mil Apps disponíveis na loja. Ótimo. Desses, quanto estão prontos pra multitarefa do iOS4? Bem.. Nenhum! Ou seja, enquanto os desenvolvedores não se mexerem e adaptarem seus programas pra fazer uso das tais 7 APIs liberadas pela Apple, tudo vai ficar como é hoje.
A idéia da Apple em fazer a multitarefa de uma forma a não consumir recursos (CPU, RAM, etc.) e otimizar a bateria é muito boa. Porém, ficar dependendo dos desenvolvedores pra adaptar seus sistemas as APIs pra isso, é complicado. Quantos dos 225mil Apps que temos hoje serão portados pra suportar isso nos próximos 90 dias? Arrisco a dizer que não muitos. Talvez Apps de GPS, comunicadores instantâneos, programas de VoIP, streaming e coisas bem específicas, irão se adaptar. Mas a enorme maioria, simplesmente não vai, seja porque teriam trabalho extra, seja porque as 7 APIs da Apple não resolve o caso pra eles.
Um programa que uso diariamente e que não funcionaria legal na multitarefa da Apple é o RunKeeper. Pra quem não conhece, um rápido resumo: o App monitora sua atividade física ao ar livre, através do rastreamento do iPhone por GPS, ‘plotando’ as coordenadas num gráfico, que pode ser acompanhado com uma integração ao Google Maps, mostrando ainda, dados como elevação do terreno. Super bacana! Porém, para que ele continue a fazer isso, ele precisa estar rodando inteiro na multitarefa. Não existe um ‘departamento’, dentro das APIs da Apple, que ele possa transferir a função, como no caso do Pandora ou Skype. Dessa forma, eu teria que deixar o RunKeeper sempre em primeiro plano, sem poder, abrir outros Apps, como email, Twitter, Feeds, etc. (sim, eu sou hiperativo, já confessei mais lá em cima ;)

Realmente e concordo com você quando cita os apps que realmente e possivelmente irão ser portados!! Eu ainda aposto muito na dupla kirikae e backgrounder, porque realmente acredito que a Apple não deva fazer algo tão grandioso quanto a essa dupla!
O bom dessa dupla é que já sabemos que funciona e não precisa adaptar nada. Aliás, do jeito que funciona hoje, eu acho ideal!
Temos que aguardar a evolução dos aplicativos pra ver como comportam no novo iOS, eu acho que daqui dois meses veremos ótimos resultados.
Espero realmente que sim, mas não ponho muita fé que todos os desenvolvedores irão se animar.
Acho que o caso de download de vídeo em segundo plano pode ser feito usado a API de "Task Completion". Não sei ao certo por não ter acesso a API, mas em teoria funcionaria.
Mas a pergunta: Como que todos os 255 mil Apps realmente aproveitariam a multitarefa? Lembrando que todos eles ganham "troca rápida", onde ele não é morto, mas só pausado – assim ele não vai aparecer vazio quando você voltar, mas estará exatamente como você o deixou.
Tenho rodado o iOS4 aqui no iPhone 3Gs e quando comuto entre os Apps, eles realmente são encerrados e começa tudo do zero. Não existe a tal 'troca rápida'. O que fica na barra inferior, pra ser chamado rapidamente, funciona apenas como um atalho para os Apps que você já executou. Ao chamá-los, inicia o processo do zero.
My Fault, then. Mas pelo que vi e pelo que consegui ler da documentação do iOS 4, deveria funcionar. Estranho.
Acho que sem adaptação, não funciona. Eu testei pelo menos uns 10 programas, desde cliente de Twitter, leitor de feeds, SlingBox, etc. e nada de funcionar. Quando eu aciono a barra inferior, onde estão os programas que já foram executados, eles simplesmente iniciam do zero.
Mas o MT só vai funcionar para os apps adaptados e atualizados ao iOS 4, que provavelmente, só no dia 21. D:
Por enquanto, só funcionam os do firmware mesmo.
(Li isso no site da Apple, acho)
Acho que já teria que tá disponível nessa versão GM que estou usando, pois os desenvolvedores teriam que testar isso. Observe que na figura que ilustra o post, do Keynote, tem na tela as 7 APIs. A última, é a troca rápida. Ou seja, não são todas as Apps que vão funcionar de cara. Se o desenvolvedor não aptar, não vai acontecer mesmo.
Mas a troca rápida é uma das APIs. Pra funcionar, o desenvolvedor tem que adaptar o App.
Parabéns pela explicação fácil e divertida…
Abraços
Valeu. Tive que falar 'alguns absurdos' do ponto de vista mais técnico, mas foi pra tentar explicar de forma fácil.
Muito bom o post. A Apple tem 45 bilhoes de dolares no caixa, ela eh capaz de lancar a tecnolgia q ela quiser, sem duvidas, mas ela nunca da tudo, essa eh uma grande sacada dela, a noticia boa eh que existe o jailbreak ora fazer essa outra parte, oq seria do meu iphone/ipad sem o sbsettings, lockinfo, bitesms, grip? Juro, se n fosse o jb eu teria um android. <3 jb
Verdade. Do jeito que o iPhone é nativo, complica pro usuário médio/ avançado.
Outra coisa, com o A4 o backgrounder vai fumcionar absurdamente bem!
No 3Gs mesmo já roda super bem.
Tem que funcionar! No 3Gs já roda legal.
Muito boa sua explicação… eu já usava suas palavras para falar sobre esta falsa MT no iPhone. E sem dúvida, ele já era multitarefa para os aplicativos nativos, Eu uso o GPS Motion X e caso o feche, ele continua fazendo a cronometragem, etc e tal… isto não era multitarefa?.. risos…
@serginhofloripa
Exato
Poiseh!
Faz todo sentido nenhum app testado funcionar ainda, somente aqueles da própria Apple (que vem com o Firmware) e os dos desenvolvedores que já fizeram todas as adaptações necessárias e, mais importante, as publicaram na App Store funcionariam, nem sei se dá pra publicar antes já que seria um App pra uma versão acima da disponível na App Store.
Eu também uso o RunKeeper, pelo meu entendimento ele teria que ter acesso a duas funções principais que não sei se tem API, a de GPS (mais importante) e a de áudio (para continuar tocando o que voce estiver ouvindo). Pelo que li rapidamente a API parace ser possivel sim, Mas, novamente, claro que isso só acontecerá se o pessoal que o desenvolve se der ao trabalho de fazer as devidas alterações.
Resumindo, a Apple até que teve uma idéia boa, a única coisa é que ele jogou toda a responsa de fazer funcionar (e o custo) na mão de todos os seus desenvolvedores.
No backgrounder tem uma coisa bem interessante, onde você configura o seguinte: blacklist (Apps que jamais ficarão rodando em background), whitelist (Apps que sempre ficarão rodando em background, mesmo que você esqueça de ativar) e outras Apps você escolhe, no momento que for mais adequado. Se vc sair e não fizer nada, não fica. Se quando tiver saindo, pressionar 2x o home, por exemplo, entra em background.
Excelente o artigo e seu ponto de vista.
Parabens, acompanho td dia seu twitter.
Abs
Valeu
Muito bom o artigo, mas o RunKeeper não usaria a API "Background Location"? Ela é exatamente pro GPS, que é o que o RunKeeper precisa.
Abraços, Dino.
Este é um ponto de vista interessante… Que acha, @GordoGeek?
Pensei agora em uma forma fazer isso com a API “Background Location” no método de multitask da Apple, mas seriam necessárias muitas mudanças no App, daria trabalho, mas seria melhor o desenvolvedor criar um novo aplicativo e isso significa mais dinheiro… é possível sim.
Dino e Alexandre, da forma que pensei, o aplicativo teria que ter algumas funções a serem chamadas para salvar algumas coisas (como a hora por exemplo) salvas nos segundos do fechamento e chamar a API e, quando o aplicativo será aberto novamente teria que chamar outras funções, ou seja, seria necessário ser feito algo bem otimizado para se ter todos os recursos que existem no RunKeeper.
Olha, eu terei de discordar que o multi-task proposto pela apple “não funciona bem pra quase nada”.
Isto é, são POUQUISSIMOS os casos em que o multi-task do iOS 4 não irá suprir as necessidades do desenvolvedor.
a imensa maioria dos apps simplesmente não necessita de multi-task, apenas de um “restore point”, e isso a apple já forneceu com o fast app switiching.
Fora isso? Push e Audio background resolvem todos os problemas.
eu diria que o único serviço que está incompleto é justamente aquele que fornece o verdadeiro multitask, o “task completion”. Isto é, para fazer upload de fotos no flickr, beleza.
Mas… e para deixar um vídeo fazendo download em background? pelo que eu li essa API permite que um app fique aberto por NO MÁXIMO 360 segundos, isto é, 6 minutos.
Esse sim, é um aspecto onde a apple ainda peca no multi-task… como o iMovie irá agir em background? o render dos vídeos deverão demorar 20, 30 minutos… como vai ficar?
Olá @gordogeek bom dia! Quero parabenizá-lo pelo excelente artigo. Além de ser um profissional de TI mega boga, você escreve de maneira extremamente didática e divertida. Obrigado por compartilhar conosco suas observações e reviews. Mesmo não concordando totalmente com você em alguns pontos, é sempre um prazer enorme passar aqui. Abraços.
:D
Mas isto faz parte da evolução, antes os desenvolvedores não tinham culpa, o recurso não existia, hoje tem a possibilidade o recurso já existe, basta usar a API e se não tiver neste caso a culpa é do desenvolvedor.
Não dá para imaginar que o SO tenha que aplicar a multitarefa em todos os antigos apps, já que o recurso foi pensado agora e de uma forma diferente, os desenvolvedores vão ter que ralar mesmo, mas imagino que os grandes aplicativos vão ter. Se fosse magicamente todos os antigos começarem a ter multitarefa com a simples atualização do SO, eles já teriam desde a primeira versao do iOS, como você disse o Unix tem isto como padrão, mas a Apple pensou em não drenar a bateria por isso a implementação é diferente, eu acho até injusto querer que tudo simplemente comece a ter multitarefa agora. Eu gostei do artigo, da explicação, mas discordo neste ponto.
Acho que agora depende dos desenvolvedores.
Muito bom o texto Whinston !!! Dá pra perceber que multitarefa em dispositivos moveis, com recursos escassos, é como um cobertor curto, puxa daqui, falta ali.
Gostei do artigo muito bem explicado ,mas seria muito difícil logo após a apresentação tudo estar funcionado perfeitamente ,mesmo com a liberação do Ios4 Gm .Que servira para os desenvolveres testarem seus app.
acredito que logo após a liberação em 21 de junho haverá update dos principais app ,nw acredito que todos necessitam de mult task, é um processo longo de adaptação.
Olá editores do PontoGeek,
Sou um leitor do blog mesmo sem ter uma grande intimidade nem com hadwares, nem softwares e nem mesmo com a linguagem um tanto hermética utilizadas nesse meio. A maneira como as inovações são apresentadas no blog, no entanto, permitem o acompanhamento dessas tecnologias de vanguarda e me deram uma confiança bastante alta sobre tudo que é postado.Daí a ideia de buscar em vocês algumas respostas sobre o iPhone. Espero que me respondam.
Eu sou um acadêmico de medicina (talvez explique um pouco da minha ignorância tecnológica), e existem diversos aplicativos muito úteis para a minha área disponíveis para o Iphone. Antigamente, a maior parte destes aplicativos era desenvolvida para Palm, com centenas de livros e programas extremamente úteis na prática médica, porém a migração para o iPhone é evidente.
Enfim, gostaria de adquirir um Iphone, por convergir as funções de Palm e celular num só dispositivo, o que facilita muito a minha vida. Tenho, no entanto, uma certa ansiedade em relação ao Iphone 4 e seu desbloqueio e devido a minha rotina, precisaria do dispositivo até, no máximo, a última semana de outubro.
As previsões são de que em setembro o novo Iphone chegue por aqui, desbloqueado. Esse desbloqueio, no entanto, é em relação às operadores de telefonia, não um jailbreak para aplicativos não autorizados pela Apple, correto?
Porém, como já aconteceu com o Ipad, pode haver uma certa demora, devido a demanda dos países em que o Iphone desembarca antes, além disso, gostaria de um certo tempo para me adaptar ao aparelho…
A dúvida: vale a pena importar o aparelho antes da data oficial de chegada no Brasil? Se sim, de que país? Algum em que o aparelho venha desbloqueado pela própria Apple, como Itália? Aquele desbloqueio por sofware que a cada atualização do iTunes, vale a pena? Ou isso tudo vai só me garantir dores de cabeça pelo tempo em que durar o aparelho, valendo a pena esperar o lançamento oficial?
Qual a recomendação de vocês, considerando que o preço não é um fator determinante, que são muito mais familiarizados com tais problemas do que eu?
Grato.
Ricardo.
[...] Links Mencionados ~ Koi Pond ~ iOS 4 ~ A multitarefa da Apple é engenhosa, mas não resolve [...]
Olá, adorei essas dicas muito bacana mesmo.
Tenho uma duvida aqui eu tenho um Iphone 3gs 32G fiz a atualização dele ja, porem não acho que meus apps estão funcionando no multitarefas, por exemplo o SKYPE eu uso ele bastante. Quando saiu dele ele fica off para os outros, e assim mesmo ?
Vlw obrigado
O seu texto é bom mas como o Juliano Rossi disse, dizer que a multi-tarefa da apple não resolve é falta de pesquisa, porque eu já testei com vários jogos como Enigmo e Labyrinth além daqueles de xadrez e etc e funciona muito bem MESMO eu jogava uma fase de cada jogo, e ao fundo ouvia last.fm…
Fast app switching foi a maior cartada do multitasking da Apple, pq o app "pausa" e volta de onde parou.
Mas ressalto que gostei muito do texto bem explicado