Explicação detalhada do combate real da tecnologia de desenvolvimento subjacente do Android! Introdução à comunicação entre processos do Android, ingressou com sucesso na Tencent

Prefácio

  • Em primeiro lugar, declaro que o anfitrião não é uma vaca grande e não existe uma grande tecnologia. É apenas a equipe de expansão da empresa. Felizmente, como um entrevistador técnico, o que penso depois de entrevistar tantas pessoas, espero poder ajudar você um pouco.

1. Descrição de fundo

Este documento é baseado na orientação de retificação de compatibilidade da saída de alteração da versão beta1 do Google Android R. Se houver novas alterações e novos recursos na versão beta subsequente, também atualizaremos os capítulos relevantes do documento, continue para preste atenção ao desenvolvedor.

2. Limitação de espaço de armazenamento

2.1 Antecedentes

Para permitir que os usuários controlem melhor seus arquivos e limitar a confusão de arquivos, o Android R modificou o método do APP para acessar arquivos no armazenamento externo. O novo recurso de armazenamento externo é chamado de armazenamento com escopo.

O Android R ainda usa READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE como permissões de tempo de execução relacionadas ao armazenamento orientado ao usuário, mas agora, mesmo que essas permissões sejam obtidas, o acesso ao armazenamento externo também é restrito. Os cenários em que o APP requer essas permissões de tempo de execução foram alterados e a visibilidade do armazenamento externo para o APP em várias circunstâncias também mudou.

Nos novos recursos do Armazenamento com escopo, o espaço de armazenamento externo é dividido em duas partes:
Diretórios públicos : Downloads, Documentos, Imagens, DCIM, Filmes, Música, Toques, etc.

  • Os arquivos no diretório público não serão excluídos após a desinstalação do APP.
  • O APP pode acessar os arquivos nele por meio do SAF (System Access Framework) e da interface do MediaStore.

Diretório específico do aplicativo

  • Depois que o APP for desinstalado, os dados serão apagados.

  • O diretório privado do APP, o APP não precisa de nenhuma permissão ao acessar seu próprio diretório específico do aplicativo

O Android R estipula que o APP tem dois modos de visualização do espaço de armazenamento externo: Visualização herdada e Visualização filtrada.

Visualização filtrada

  • O aplicativo pode acessar diretamente o diretório específico do aplicativo, mas não pode acessar diretamente os arquivos fora do diretório específico do aplicativo. O acesso a diretórios públicos ou diretórios específicos de aplicativos de outros aplicativos só pode ser acessado por meio de MediaStore, SAF ou ContentProvider, FileProvider, etc. fornecido por outros aplicativos.

Visualização herdada

  • Modo de compatibilidade. Como antes com o Android R, depois de solicitar permissão, o aplicativo pode acessar o armazenamento externo e tem permissões de acesso completas.

No Android R, os aplicativos com um SDK de destino maior ou igual a 29 são atribuídos à Visualização filtrada por padrão, caso contrário, eles são atribuídos à Visualização herdada por padrão. O APP pode ser AndroidManifest.xmlfornecido para os novos atributos requestLegacyExternalStoragepara modificar o modo de visualização do espaço da memória externa, verdadeiro para a Visualização Legada, falso para Visualização Filtrada. Você pode usar Environment.isExternalStorageLegacy()esta API para verificar o modo de operação do APP. Depois que o APP abrir a Visualização filtrada, os novos recursos do Armazenamento com escopo entrarão em vigor no APP.

Além de dividir o armazenamento externo e definir a visualização filtrada, o Android R também fez melhorias ou restrições em alguns detalhes de consulta, leitura e gravação de arquivos. Por exemplo, as informações de localização geográfica em arquivos de imagem não serão mais fornecidas por padrão, e o O campo DATA obtido ao consultar o MediaProvider não será mais fornecido. Confiável, o status Pendente do arquivo foi adicionado e assim por diante. Para obter detalhes sobre esses detalhes, consulte o capítulo sobre esquemas de adaptação.

2.2 Impacto de compatibilidade

O armazenamento com escopo tem um grande impacto no acesso do APP ao armazenamento externo, armazenamento de dados do APP e compartilhamento de dados entre os APPs. Os desenvolvedores devem prestar atenção aos seguintes problemas de compatibilidade.

2.2.1 Não é possível criar um novo arquivo

A causa do problema: use diretamente um caminho fora do diretório específico do aplicativo para criar um novo arquivo.

Análise do problema: no Android R, o APP só permite arquivos gerados por caminho dentro de seu próprio diretório específico do aplicativo.

Solução: consulte 2.3.1 para o método e caminho de arquivo de novos arquivos no diretório específico do aplicativo do próprio APP; se você deseja criar um novo arquivo no diretório público, use a interface MediaStore, consulte 2.3 .2; se você deseja criar um novo arquivo em qualquer diretório Arquivo, o SAF é necessário, consulte 2.3.3.

2.2.2 Não é possível acessar arquivos no dispositivo de armazenamento

Razão do problema 1: Use o caminho diretamente para acessar o arquivo de diretório público.

Análise do problema 1: No Android R, o APP só pode acessar o diretório específico do aplicativo no dispositivo de armazenamento externo por padrão.

Solução 1: Consulte 2.3.2 e 2.3.3, use a interface MediaStore para acessar arquivos multimídia no diretório público ou use SAF para acessar qualquer arquivo no diretório público. Nota: O campo DATA consultado na interface do MediaStore será descartado no Android R. Ele não deve ser usado para acessar o arquivo ou determinar se o arquivo existe; após obter o arquivo Uri da interface do MediaStore ou SAF, use o Uri para abrir o FD ou fluxo de entrada e saída em vez de convertê-lo em um caminho de arquivo para acessar.

Causa do problema 2: Use a interface MediaStore para acessar arquivos não multimídia.

Análise do problema 2: No Android R, o uso da interface MediaStore só pode acessar arquivos multimídia no diretório público.

Solução 2: Use SAF para aplicar aos usuários as permissões de leitura e gravação de arquivos ou diretórios, consulte 2.3.3.

2.2.3 Não é possível compartilhar arquivos corretamente

Problema Causa: quando o APP compartilhará o diretório específico do aplicativo de arquivos privados com outro APP, usando um file://tipo de Uri.

Análise do problema: no Android R, como os arquivos no diretório específico do aplicativo são privados e protegidos, outros aplicativos não podem acessá-los por meio do caminho do arquivo.

Solução: Veja 2.3.4, use FileProvider, irá content://compartilhar com outros tipos de APP Uri.

2.2.4 Incapaz de modificar os arquivos no dispositivo de armazenamento

Razão do problema 1: Use o caminho diretamente para acessar o arquivo de diretório público.

Análise do problema 1: igual a 2.2.2.

Solução 1: Igual a 2.2.2, use o método correto de acesso ao arquivo de diretório público.

Causa do problema 2: Depois de usar a interface MediaStore para obter o Uri do arquivo multimídia no diretório público, use diretamente o Uri para abrir o OutputStream ou o descritor de arquivo.

Análise do problema 2: No Android R, para modificar o arquivo do diretório público, é necessária a autorização do usuário.

Solução 2: Depois de obter o arquivo de multimídia do diretório público Uri da interface do MediaStore, ao abrir OutputStream ou FD, preste atenção para capturar RecoverableSecurityException e, em seguida, solicite que o usuário exclua e modifique o arquivo de multimídia. Consulte 2.3.2.6; use SAF para obter o arquivo ou diretório Ao usar o Uri, o usuário foi autorizado a ler e escrever e pode usá-lo diretamente, mas preste atenção à oportunidade das permissões do Uri, consulte 2.3.3.6.

2.2.5 Exclusão inesperada de arquivos após a desinstalação do aplicativo

A causa do problema: Salve os arquivos que deseja manter no diretório específico do aplicativo do armazenamento externo.

** Análise do problema: ** No Android R, desinstalar o APP exclui os dados do diretório específico do aplicativo por padrão.

Solução: O APP deve salvar os arquivos que deseja manter no diretório público através da interface do MediaStore, consulte 2.3.2. Por padrão, a interface MediaStore salvará arquivos que não sejam de mídia no diretório Downloads.Recomenda-se que o APP designe o diretório de primeiro nível como Documentos. Se o APP quiser reter os dados no diretório específico do aplicativo durante a desinstalação, declare android: hasFragileUserData = "true" em AndroidManifest.xml, para que, quando o APP for desinstalado, uma caixa pop-up indique ao usuário se deseja reter os dados do aplicativo.

2.2.6 Não é possível acessar os dados de localização geográfica no arquivo de imagem

A causa do problema: analise os dados de localização geográfica diretamente do fluxo de entrada do arquivo de imagem.

Análise do problema: como as informações de localização geográfica da imagem envolvem a privacidade do usuário, os dados não são fornecidos ao APP por padrão no Android R.

Solução: solicite a permissão ACCESS_MEDIA_LOCATION e use a interface MediaStore.setRequireOriginal () para atualizar o arquivo Uri, consulte 2.3.5.1.

2.2.7 Problemas de atualização Fota

Causa do problema: Depois que o Fota foi atualizado, o APP foi desinstalado e os dados do APP não puderam ser acessados ​​após a reinstalação.

Análise do problema: os novos recursos do armazenamento com escopo só são eficazes para aplicativos recém-instalados no Android R. O dispositivo é atualizado da versão anterior do Android R para o Android R, e o aplicativo instalado obtém a visualização Legacy View. Se esses aplicativos salvam arquivos no armazenamento externo diretamente por meio do caminho, como o diretório raiz do armazenamento externo, o APP é desinstalado e reinstalado. O novo APP obtém a visualização Filtered View, e os dados antigos não podem ser acessados ​​diretamente pelo caminho, resultando nos dados perdidos.

Solução: O APP deve modificar a forma de salvar os arquivos, não usar mais o caminho para salvar diretamente, mas usar a interface do MediaStore para salvar os arquivos no diretório público correspondente. Antes da atualização do Fota, os dados do histórico do usuário do APP podem ser migrados para o diretório público por meio da interface do MediaStore. Além disso, o APP deve alterar a forma de acessar os arquivos fora do diretório específico do aplicativo, use a interface MediaStore ou SAF.

Finalmente

Se você vir isso e achar que o artigo está bem escrito, dê um polegar para cima? Se você acha que há algo que vale a pena melhorar, por favor, deixe-me uma mensagem. Certamente investigará cuidadosamente e corrigirá deficiências. Obrigada.

Por fim, coloque um benefício no final do artigo: endereço do GitHub

PS: Eu tenho muitos materiais de vídeo de aprendizado do Android de alto nível e materiais de entrevista no GitHub ~

BC% 9F% E5% A6% 82% E4% BD% 95% E9% 9D% A2% E8% AF% 95% E6% 8B% BF% E9% AB% 98% E8% 96% AA% EF% BC% 81.md) **

PS: Eu tenho muitos materiais de vídeo de aprendizado do Android de alto nível e materiais de entrevista no GitHub ~

Boas-vindas a todos para se comunicarem e discutirem juntos ~

Acho que você gosta

Origin blog.csdn.net/Sunbuyi/article/details/114190937
Recomendado
Clasificación