Porque é que o iOS parece tão suave?
Muitas respostas interessantes. Mas para simplificar, o iOS é tão suave porque
- O SO inteiro é construído em Objective-C e otimizado para o hardware em cada telefone.
- Isto significa que cada operação é executada da forma mais eficiente para o dispositivo em que é executado.
- Isto significa que o programa executa com o menor número possível de instruções para o hardware em que é executado.
- As aplicações mais comuns são construídas em Objective-C ou Swift - mais uma vez direcionadas para o hardware de cada dispositivo específico.
- Isso significa que cada aplicativo fala diretamente com a interface do sistema operacional subjacente.
- Para algumas tecnologias de texto, como Metal, o aplicativo fala diretamente com a GPU.
- Monolithic Design (Obrigado Stuart Black pelo lembrete)
- Aplicação possui todo o design - o hardware, o software, tudo.>li> O SO e todos os aplicativos são construídos para rodar apenas em hardware da Apple.>li>Less options significa mais perto do metal. Os produtos Apple são capazes de rodar com menos níveis de abstração de software, o que significa menos camadas de software para passar.
Qualquer coisa sobre o design Apple é sobre a experiência do usuário. Eles podem não ser os primeiros a comercializar, mas quando seu produto chegar ao mercado, provavelmente será a melhor experiência.
Android e Windows Mobile ambos têm muito mais camadas de abstração que o código deve passar. A maioria dos aplicativos Android são escritos em Java. Java não fala o código nativo da máquina para a CPU. Java compila o que é conhecido como byte-code. Isso permite que uma única compilação de um aplicativo seja executada em qualquer plataforma de hardware com qualquer tipo de CPU. O JRE (Java Runtime Environment) fornece o sistema operativo para o sistema operativo e os recursos do dispositivo em dispositivos compatíveis com java. Em seguida, ele fornece o JVM (Java Virtual Machine), que é um computador virtual. O JVM é a ligação entre o bytecode e os insteuctions nativos da CPU, bem como a ligação entre as interfaces baseadas em java e os ganchos de SO abstraídos.
É ainda mais complicado do que eu o faço em torno. Mas no final, Java só pode fornecer, na melhor das hipóteses, uma performance quase nativa, e na pior das hipóteses, uma performance abismal. Não há garantia de performance com java. Para sistemas baseados em java que são utilizados em operações críticas existe um java especial em tempo real que garante um desempenho previsível, mas ao custo da degradação do desempenho máximo.
Google fez um grande trabalho para melhorar o JRE/JVM para andróide e foi processado por ele pela Sun Microsystems (agora Oracle).
O outro problema com o Android é que mesmo se todos os aplicativos fossem escritos em C (que é uma opção) e o desenvolvedor construiu as muitas permutações necessárias para suportar todas as possibilidades de hardware - o maior problema com o Android é que todos que o usam (bem, quase todos) como o sistema operacional do telefone personaliza a interface. Quando a Samsung substitui os componentes principais por suas próprias versões, você está à mercê da Samsung. E, muito francamente, a maioria dos fabricantes não tem as habilidades necessárias para construir uma interface de usuário de alto desempenho. Experimente um Google Pixel e verá como a experiência é muito melhor.