Explique como eu sou Júnior-Support Library e Google Play Services

Hadi Tok Seg. Dez 16, 2018 · 7 min ler

Hoje o ambiente de desenvolvimento é totalmente diferente dos primeiros anos do Android. Para começar, é realmente difícil entender por que essas ferramentas são usadas porque geralmente é negligenciado dizer quais foram os problemas em primeiro lugar. Eu recebi muitas perguntas de desenvolvedores que acabaram de começar o desenvolvimento do Android ou de tentar progredir. É um tópico longo, por isso estou planejando falar sobre isso em três partes e a primeira parte será a Biblioteca de Suporte do Android e o Google Play Services.

Biblioteca de suporte do Android
A biblioteca de suporte do Android e outras bibliotecas do Android lançadas pelo Google se fundiram à Jetpack. Suporte Android é o mais antigo e o núcleo do Jetpack IMO e eu vou começar com isso. Então, por que acabamos tendo que incluir o suporte do Android em todos os projetos do Android?
Temos a biblioteca de suporte do Android por causa dos problemas de atualização do sistema operacional no Android. O Android é executado em dispositivos com várias marcas e modelos, ao contrário do iOS. É um processo bastante difícil desenvolver uma atualização de versão do SO para os fabricantes, para que eles evitem o máximo possível. Até mesmo o Google lança atualizações de versão do sistema operacional para os telefones Pixel e Nexus por apenas dois anos. Devido a esse problema de atualização, o Google teve que separar alguns dos recursos como bibliotecas externas para que esses recursos pudessem ser usados em versões mais antigas. No iOS, os dispositivos suportados podem obter atualizações do sistema operacional para que uma biblioteca externa, como a Biblioteca de suporte, não seja necessária. Vamos ver rapidamente quais bibliotecas o Google separou do sistema operacional.

Fragmento

Tanto quanto me lembro Fragments introduzido para tablet apenas Android versão 3.0 HoneyComb e esta página me verifica. O Google colocou o fragmento no sistema operacional e na biblioteca de suporte, mas corrigiu esse erro suspendendo a versão incluída no sistema operacional há algum tempo. Foi realmente confuso qual versão do fragmento precisa ser usada. A razão da introdução dos fragmentos foi Layouts Multi-Pane . É basicamente dividir a tela em visualizações de lista e detalhes quando a tela é paisagem e usar a tela inteira ou a visualização de detalhes em modo retrato. A resposta para o “Por que não estamos usando o modo de exibição personalizado?” Complica mais as coisas. Acredito que o objetivo do Fragments não era agrupar views como telas, mas ter construções que sobreviveriam entre Activities quando recriadas devido às alterações de configuração, como a mudança de orientação da tela. A recriação de atividades causou dois problemas:

  • Foi difícil transferir o estado da atividade destruída para uma recém criada
  • Se uma tarefa assíncrona (provavelmente era AsyncTask) estiver sendo executada enquanto a alteração de configuração é feita, ela está causando falhas porque não consegue localizar a Atividade e seus elementos de retorno de chamada se referindo. Estava causando falhas e falha ao notificar o usuário sobre o resultado da tarefa.

É claro que esses problemas tinham soluções, mas eles introduzem muito clichê e não foram mencionados em exemplos de código. Muitos desenvolvedores e aplicativos sofreram com esses problemas. Assim, os fragmentos são apresentados como uma prática recomendada para esses problemas, pois eles podem permanecer ativos se uma atividade for destruída. Muitos acreditavam que Fragmentos complicavam mais as coisas e eu principalmente concordo com eles.

Layout

Com os layouts apresentados com a biblioteca de suporte, adicionamos novos layouts à pilha e melhoramos os existentes. Vou mencionar cerca de três layouts e contar um pouco da história do Android.

Toolbar

Quando o Android 3.0 introduziu uma nova linguagem de design chamada Halo também foi introduzida juntamente com o Layout Multi Pane. Um dos elementos centrais do Halo foi usar o ActionBar . Mas pré 3,0 versões não tinha ActionBar empacotado em. Tanto quanto eu sei Jake Wharton portado ActionBar código-fonte como ActionBar Sherlock e permitir que desenvolvedores para usá-lo em versões Android mais antigos. O ActionBar Sherlock era tão bom que o Google não precisou liberar uma Biblioteca de Suporte para ActionBar por anos. Agora, com o Material Design, temos a Toolbar de Toolbar para atender a essa finalidade.

RecyclerView

Antes do RecyclerView , o ListView e o GridView são usados para exibir dinamicamente uma lista de itens similares de maneira eficiente.

Há duas coisas que precisam ser feitas no método getView() do adaptador para desempenho de rolagem com ListView e GridView . O primeiro é reutilizar o convertView em vez de criar um novo View e o segundo é usar o padrão ViewHolder para evitar chamar o findViewById() para acessar os filhos do pai a cada vez que o método é chamado. Com essas duas técnicas, podemos ter um desempenho similar com o RecyclerView mas a API ListView não as impõe para serem implementadas. Mas com o RecyclerView e seu adaptador cuida de algumas dessas coisas e força os desenvolvedores a fazer o resto.

ListView e Gridview tem outros problemas, como personalização e uso de diferentes tipos de visualizações. Com o LayoutManager podemos definir como a lista será exibida (em uma lista, grade, etc) e com ItemDecorator podemos especificar coisas como divisores e cabeçalhos para o RecyclerView . getItemViewType(position: Int) no parâmetro RecyclerView.Adapter e viewType no viewType onCreateViewHolder(parent: ViewGroup, viewType: Int) nos permite usar diferentes tipos de views.

Layout de restrição

FrameLayout , RelativeLayout e LinearLayout foram layouts principais no Android. Com isso, conseguimos fazer qualquer tela, mas em alguns casos tivemos que usar layouts aninhados. Todos os View e ViewGroup adicionados ao layout afetam o desempenho. ConstraintLayout veio para ajudar a criar telas em uma hierarquia plana. RelativeLayout também pode obter uma hierarquia de visualização simples, mas o ConstraintLayout oferece melhor desempenho. Quero observar que, para um melhor desempenho, ainda prefiro o LinearLayout ou o FrameLayout sobre o ConstraintLayout, se não tiver layouts aninhados.

MultiDex

Quando o .apk está sendo construído, os códigos que escrevemos e as bibliotecas que usamos são compilados em bytecode e colocados em arquivos .dex. O Dalvik pode fazer referência a 64k (65.536) métodos na memória em um arquivo .dex. Antes de Android 5 .apk contendo apenas um arquivo dex. Isso estava causando potencialmente exceder o limite de 64k em um arquivo .dex e estava causando falhas. Depois que a Biblioteca de Suporte foi introduzida, as classes deveriam ter sido incluídas com o sistema operacional, o que foi incluído no .apk como uma biblioteca. Além disso, o ecossistema Android também cresceu e os desenvolvedores começaram a incluir mais bibliotecas em seus projetos. Eventualmente, os projetos começaram a atingir o limite de 64k. Empresas como o Facebook implementaram suas próprias soluções, mas não era o caso de todos. Lembro-me de ter removido coisas para não passar com o limite de 64k. Em algum momento, a Biblioteca de Suporte do Android e o Google Play Services se dividiram em várias bibliotecas menores e reduziram a contribuição para a contagem do método dex. Proguard salvou muitas pessoas dessas dores de cabeça, mas não foi usado em todos os projetos. A biblioteca de suporte MultiDex veio resgatar projetos que suportam o pré Android 5 e ativou o uso de vários arquivos .dex em um .apk. Espero que todos os projetos sejam minSdkVersion 21+ para que não tenhamos que usar a biblioteca de Suporte Multidex.

AppCompat

AppCompat adiciona algumas novas funcionalidades, mas acho que o principal objetivo é permitir que usemos o que estiver disponível no sistema operacional, sem ter que nos preocupar com a versão da API. Isso significa que você pode obter resultados diferentes com diferentes versões da API. Por exemplo, o documento da NotificationCompat api dá este exemplo: “ Os botões de ação não aparecerão nas plataformas anteriores ao Android 4.1. Os botões de ação dependem das notificações expandidas, que estão disponíveis apenas no Android 4.1 e posterior . ”

Google Play Services

Como você sabe, o Android é um sistema operacional de código aberto. Isso significa que qualquer pessoa pode obter o código, fazer personalizações e executá-lo em seus dispositivos. Mas ele não contém serviços do Google (aplicativos do Google), portanto, se você utilizar o sistema operacional, não terá o Google Play, o mecanismo de pesquisa do Google, nem o Firebase Cloud Messaging (também conhecido como Google Cloud Messaging). Se uma empresa deseja executar o Android em seus dispositivos e precisar desses serviços, há duas maneiras: a primeira é concordar com os termos do Google e obter uma licença para incluir aplicativos do Google em seu dispositivo, e a segunda é preencher as lacunas por conta própria ( Amazônia e em algum momento Blackberry foi por aqui).

No centro dos Serviços do Google no Android, há uma biblioteca chamada Google Play Services. Isso é atualizável pelo Google Play e tem privilégios de root. Com as bibliotecas do Google Play Services e do Firebase, estamos ligando para APIs do Google Play Services. Depois que o Google adquiriu o Firebase, combinou algumas das funcionalidades existentes do Google no Firebase e as disponibilizou por meio do Google Play Services no Android. Acho que o Google Play Services foi criado para veicular o aplicativo Google Play, mas o Google estendeu a funcionalidade para outros serviços.

Na segunda parte desta série, quero falar sobre arquitetura Android e componentes de arquitetura no último. Se você puder me informar sobre coisas que você acha que está faltando e você quer ser explicado, posso tentar incluí-lo como parte desta série. Agradeço a Furkan A?k?n por revisar este post. Vejo você no próximo.

Aqui está a segunda e terceira parte da série:

Me explique como se eu fosse Junior II – Arquitetura Android

Por que usamos arquitetura e injeção de dependência no Android?

medium.com