Quero saber quando uma atualização está disponível para um aplicativo, obviamente, existe um novo apk. Então, é que o apk antigo é desinstalado e o novo apk é instalado?
Não exatamente, não. Quando você desinstala um pacote, ele também remove outros dados relacionados a esse pacote: por exemplo, os dados particulares do aplicativo, seus dados no cartão SD, suas preferências padrão para esse aplicativo. Ele também informa aos outros aplicativos interessados que você o removeu por meio de uma transmissão de intenção . Outros aplicativos que recebem essa transmissão podem executar outras ações com base nisso: por exemplo, um iniciador (aplicativo na tela inicial) removeria atalhos e widgets da área de trabalho desse aplicativo, pois eles não funcionarão mais.
Quando um pacote é atualizado (ou seja, substituído por um novo arquivo APK com o mesmo nome de pacote e um código de versão posterior), a versão antiga é interrompida, para que nada do aplicativo esteja em execução. O arquivo APK antigo é removido e o novo o substitui, mas as outras ações de desinstalação não são executadas: os dados do aplicativo particular e as preferências padrão são mantidos, e a transmissão da desinstalação não é enviada. Em vez disso, é transmitida uma intenção diferente para informar aos aplicativos interessados que o pacote foi atualizado.
Portanto, enquanto o arquivo APK antigo é removido, o efeito de uma atualização é bem diferente de desinstalar o pacote antigo e instalar o novo.
No Google Play, a situação pode ser um pouco diferente se o desenvolvedor tiver ativado atualizações delta (chamadas atualizações inteligentes do Google).
Em uma atualização delta, apenas as alterações entre as duas versões são baixadas e aplicadas ao APK existente. Por exemplo, se você tem um aplicativo com 15 MB de tamanho e o desenvolvedor decide alterar a imagem de plano de fundo, não precisa baixar o aplicativo inteiro novamente, basta baixar o delta (diferença), que inclui o novo imagem. O APK antigo é duplicado, o novo conteúdo é injetado na cópia do APK antigo e, se for bem-sucedido, o APK antigo é removido. O resultado final é o APK atualizado.