Explicação detalhada das habilidades de operação para evitar atrasos no desenvolvimento

Este artigo apresenta principalmente a explicação detalhada de como evitar atrasos nas habilidades de operação no desenvolvimento. Amigos necessitados podem consultá-lo para referência. Espero que possa ser útil. Desejo a você muito progresso e uma promoção antecipada e aumento de salário

prefácio

No desenvolvimento, vamos envolver mais ou menos alguns cenários que precisam usar operação de atraso, mas a operação de atraso não é realmente uma boa escolha, não é uma boa solução, porque é incontrolável e também pode gerar questões de lógica de tempo. Desta vez, vamos fazer um balanço de alguns cenários que usam operações atrasadas e como evitá-los. O conteúdo desta vez é relativamente básico.

Cenas usando lapso de tempo

Quando entramos em contato com o desenvolvimento, tínhamos basicamente apenas duas soluções sem cérebro para os problemas, captura de exceção e atraso. A captura de exceção é fácil de entender. Quando você encontra uma falha e não consegue analisar a causa, muitas vezes você pode ignorá-la adicionando um try-catch, mas muitas vezes isso só tornará mais difícil solucionar o BUG. Não farei isso novamente, afinal, os bugs gerados pela falha são mais fáceis de resolver.

Na verdade, a operação de atraso também é assim: não consigo descobrir onde está o problema e, em seguida, tento aleatoriamente e descubro que adicionar um atraso de alguns segundos em algum lugar pode tornar o processo normal. Na verdade, isso é o mesmo que adição aleatória de captura de exceção, o que geralmente leva a problemas mais difíceis de solucionar; portanto, se houver um problema, acalme-se e resolva o problema, não tente usar esse método. Essa também é a maneira pela qual as operações atrasadas não devem ocorrer.

Obtenha a largura e a altura da exibição

Quando entrei em contato pela primeira vez, muitas vezes não entendia a largura e a altura da visualização corretamente. Apenas usei view.getHeight() e descobri que a altura obtida era 0. Então, não sabia por que, então comecei para tentar cegamente e, finalmente, tentou adicionar um atraso de 1 A altitude pode ser obtida em segundos.

Mas isso não é uma solução. Neste momento, a abordagem correta deve ser entender o processo de desenho da exibição, explorar por que o valor não pode ser obtido no início e ir para o código-fonte (claro, é um pouco difícil de ler cegamente o código-fonte no início), para ver isso Que tipo de mecanismo é a coisa e, em seguida, combinar essas ou mesmo análises de outras pessoas e, em seguida, olhar para o código-fonte, é fácil de ver.

Você pode saber por que você deve usar view.post

Resultados regulares do servidor de consulta

Se você tem um aplicativo, como sabe quando foi sequestrado, quando pode receber mensagens de pessoas e assim por diante. Muitas pessoas geralmente escrevem um cronômetro para enviar solicitações http ao servidor para verificar o status de vez em quando.

Se você cuidar dos detalhes, claro que isso não é problema, mas você já ouviu falar de um protocolo chamado websocket, sempre viu alguns links que não começam com http, mas começam com ws. Você já aprendeu sobre um protocolo chamado MQTT? Não importa se você não aprendeu. Ele chega até ao nível de hardware inteligente. Você já entendeu o que é IOT?

Claro, isso não significa que há um problema com a solicitação de polling, apenas precisa lidar com alguns detalhes, interrupções ou algo assim, e mesmo que haja uma maneira melhor de obter o efeito desejado, por que não usar um melhor?

Mas se você quiser executar algumas tarefas locais regularmente, não há problema em usar um cronômetro. A chave é lidar com alguns detalhes, ciclo de vida, operação de interrupção, operação de pausa, etc.

ordem de transmissão

Em situações complexas de múltiplas aplicações, os broadcasts costumam ser mais ou menos usados.Na verdade, existe um problema de sequência no registro de broadcasts e no envio de broadcasts. É possível que alguma de sua lógica faça com que a transmissão seja enviada primeiro e, em seguida, o outro lado registre, haverá uma situação em que a transmissão não poderá ser recebida. Para lidar com esse problema de maneira simples, algumas pessoas costumam adicionar um atraso para atrasar o envio da transmissão.

Então esta é realmente uma operação muito perigosa, a maneira correta é ter um certo entendimento de transmissão. Você saberá que existe um tipo de broadcast chamado sticky broadcast. Mesmo se você estiver familiarizado com o conhecimento neste campo, você ainda não entende ou não se aplica a você nesta cena, então você terá uma melhor maneira de resolver este problema, não atrasando esta operação insegura.

inicialização atrasada

Todos nós sabemos que não é bom fazer muitas operações de inicialização no Application ou no onCreate, todos nós conhecemos otimização e otimização da velocidade de inicialização, portanto não faremos inicialização nesses locais. Então algumas pessoas vão inventar alguns truques, vou adicionar um atraso nesses locais, atrasar um ou dois segundos e depois inicializar, para otimizar a velocidade de inicialização e inicializar antes de usar a função correspondente, não é? Lindo? O que você acha

Qual é o princípio do seu atraso, o mecanismo do manipulador, você conhece algo chamado IdleHandler?

Na verdade, usar IdleHandler sozinho não é uma operação segura, então por que não inicializar a função quando ela for usada pela primeira vez? Algumas pessoas podem dizer que, se a inicialização for uma operação demorada, ela afetará a experiência do usuário se for inicializada quando for usada pela primeira vez. Para esse problema, costumo usá-lo em conjunto e inicializá-lo em IdleHandler e, em seguida, inicializá-lo se for julgado que não foi inicializado quando for usado pela primeira vez. Circunstâncias especiais podem ser realizadas em alguns locais, dependendo de necessidades específicas.

Cenas usando lapso de tempo

Como o atraso é uma operação tão perigosa e geralmente há maneiras melhores de substituí-lo, devemos eliminá-lo sem usar a operação de atraso? Não, às vezes não é bom não usar, então quando você precisa usar? Obviamente, não há como resolver esse problema por outros métodos. Use-o, mas use-o com cuidado.

Por exemplo, se eu ligar para a biblioteca de outra pessoa, essa biblioteca faz uma operação e depois me liga de volta.Esse é um processo básico. Porém, essa biblioteca não é sua, talvez ele tenha escrito um BUG ou algum outro motivo, fazendo com que você chame o método dele, mas ele não te dá callback. Nesse caso, se você não fizer nada, sempre ficará preso aqui.

Então, para essa situação, geralmente é usado um mecanismo de timeout para tornar o processo mais seguro, por exemplo, se você não me ligar de volta por 20 segundos, retornarei falha. Claro, acho que devemos primeiro nos comunicar com o autor da biblioteca sobre esse problema. Não há outra maneira, então eu uso esse tipo de truque.

Mas se você fizer isso, preste atenção no status, por exemplo, você expirou, e se ele ligar de volta nessa hora? Portanto, com esse método, você precisa escrever muitas coisas para garantir sua segurança.

Outra situação é o Loading, que posso ter operado muito desde antes, ao carregar, não vou exibir o crisântemo imediatamente, mas sim com um atraso de 0,5 segundos, para que eu possa ter uma melhor experiência.

Claro, você quer escrever um atraso primeiro e, depois de algumas versões, diz ao seu chefe, quero otimizar e, em seguida, remove o atraso, vê se é obviamente mais rápido, se quiser jogar assim , então fingir que não disse.

Além disso, você também é específico sobre o atraso. Por exemplo, eu faço algumas operações depois de redesenhar e atualizar a página depois que a página é exibida. Então, como faço isso? O sistema tem uma maneira de alcançá-lo. Se você disser que eu vai fazer um atraso (estou aqui para dar um exemplo), então você precisa saber que a atualização da tela é de 16ms, mas se o desenho não for finalizado, ele será colocado na próxima atualização, por segurança, você pode configurá-lo mais alto, você pode definir um atraso de 80ms, mas não precisa ser definido para um segundo ou dois.

Cuidado com os atrasos

Por que você diz que deve tentar evitar o uso de operações de atraso, porque essa operação é realmente cheia de armadilhas e a maioria das operações de atraso no Android será implementada com postDelayed.

Antes de tudo, você tem que considerar um problema, o problema da interrupção, você precisa de um mecanismo de interrupção, por exemplo, você realizou uma operação de atraso na Activity, mas a Activity foi destruída e você ainda precisa continuar a executar a operação quando o tempo de atraso acabou? Portanto, a mensagem do Handler será removida no onDestroy da Activity.

Digamos que você adicione interrupções, mas é seguro fazer exatamente isso? Você já pensou que quando você interrompe, a mensagem já começou a ser processada. Então, neste momento, é necessário usar um estado para fazer um julgamento. De acordo com esse estado, é julgado se a Activity foi destruída. Se for consumida, as operações subsequentes não serão executadas.

Aqui está apenas um dos cenários. Na verdade, muitas vezes é perigoso usar o tempo de atraso, então você precisa ser cauteloso ao usá-lo. Se você pode usá-lo, não precisa dele. Se precisar usá-lo, você precisa pensar com cuidado.

O acima é o conteúdo detalhado da explicação detalhada das habilidades de operação para evitar atrasos no desenvolvimento.

Clique para obter
mais de 50 tutoriais em vídeo de aprendizado
Mais de 100 e-books elementares, intermediários e avançados de Python

Acho que você gosta

Origin blog.csdn.net/ai520wangzha/article/details/131141015
Recomendado
Clasificación