A Apple fez um trabalho habilidoso atenuando as desvantagens da verdadeira multitarefa com iOS 4, dando aos desenvolvedores acesso a algumas APIs escolhidas de forma inteligente (como áudio de fundo) e salvamento universal de estado.
Isso será bom o suficiente para a maioria das pessoas e aplicativos sem causar um grande consumo de bateria ou capacidade de processamento, mas, infelizmente, as novas APIs do iOS 4 não faça nada para lidar com uma das maiores vantagens da multitarefa: aplicativos em segundo plano que podem atualizar ou sincronizar informações quando não têm foco. Em outras palavras, quando o iOS 4 chegar, aplicativos como leitores de feed, clientes do Twitter e programas de mensagens instantâneas ainda precisarão estar abertos o tempo todo para sugar novas informações da Internet.
Em seu blog pessoal, Marco Arment - desenvolvedor do Instapaper favorito da App Store - postou uma ótima sugestão à Apple sobre como permitir que os aplicativos se atualizem em segundo plano de forma eficiente: dê ao iOS a capacidade de priorizar solicitações periódicas de rede de aplicativos de terceiros.
A adição de mais um serviço multitarefa resolveria esse problema para muitos tipos de aplicativos: uma solicitação de rede periódica. É assim que eu faria:
• O aplicativo fornece ao sistema um NSURLRequest e um intervalo de atualização ideal, como a cada 30 minutos, a cada poucas horas ou todos os dias.
• O iOS executa essa solicitação, sempre que julgar necessário, e salva a resposta em um arquivo local.
• Na próxima vez que o aplicativo for iniciado, o iOS entregará a ele um NSData da resposta mais recente.
Executar a solicitação “sempre que julgar necessário” é importante. O iOS pode decidir, por exemplo:
• Não atualizar quando a bateria está fraca, a conectividade é fraca, outras solicitações estão em execução, a memória livre é baixa, o uso da CPU é alto ou o usuário está previsto para exceder seu limite mensal de dados.
• Não atualizar com a frequência que o aplicativo solicita, ou aumentar o intervalo ao longo do tempo, ou ajustar dinamicamente o intervalo com base na frequência com que recebe uma resposta 304 (não modificado).
• Não atualizar se o aplicativo solicitante não tiver sido iniciado por um longo tempo.
Isso permitiria que o Instapaper baixasse atualizações em segundo plano e também beneficiaria enormemente os leitores RSS, clientes do Twitter, bate-papo programas, widgets de clima e notícias, e um grande número de outros aplicativos que atualmente não podem se beneficiar muito com o iOS ' multitarefa.
Certamente não sou um arquiteto de sistema, mas parece uma solução eficaz para mim. Na verdade, é uma solução tão compreensível e óbvia que pensar em esperar até a atualização do iOS 5 por tal funcionalidade me dá um pequeno caso de tremores... embora possa ser o Talisker de ontem à noite falando.