DEV Community

Cover image for StrictMode no Android: Porquê, quando e como utilizar
Pedro Massango
Pedro Massango

Posted on

StrictMode no Android: Porquê, quando e como utilizar

(Artigo movido da minha conta no Medium)

Já pensou em alguma ferramenta que serve de seu guardião? Que vai te alertando
quando você fizer algo de errado por acidente? Então conheça o StrictMode.

StrictMode é uma ferramenta que detecta certas coisa que você pode estar a
fazer por acidente, e te alerta sobre estas falhas para que você resolva tais
falhas.

O StrictMode é mais usado para detectar acesso à base de dados ou acesso à rede
na Thread principal do aplicativo.

ATENÇÃO: O StrictMode deve ser usado somente em tempo de desenvolvimento.

Como usar?

Para habilitar e activar o StrictMode devemos executar o seguinte código no
onCreate() da sua actividade ou da classe application:

public void onCreate() {
     super.onCreate();

     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // ou .detectAll()
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     }
 }
Enter fullscreen mode Exit fullscreen mode

Abaixo a descrição de alguns dos métodos usados acima:

ThreadPolicy

Usado para detectar violações de execução de tarefas na Thread principal do
aplicativo.

detectDiskWrites()/detectDiskReads() Captura violações de escrita e leitura
na thread principal do interface do usuário.

detectAll() Usado para capturar todas as violações de Threads do aplicativo.

VmPolicy

Usado para aplicar politicas em todas as Threads da máquina virtual.

  • detectLeakedSqliteObjects() Detecta quando um cursor SQLite é terminado sem ter se fechado.
  • detectLeakedClosableObjects() Detectar quando um objeto com um método de terminação explícita for finalizado sem ter sido fechado.
  • detectAll() Usado para capturar todas as violações de Threads do aplicativo.

Penalidades Aplicadas

Você é quem decide o que deve acontecer quando uma violação é detectada,
chamando uma das seguintes funções:

  • penaltyLog() Apresenta as violações na janela de LogCat do Android Studio, conforme eles vão aparecendo.
  • penaltyDialog() Mostra uma caixa de dialogo na tela sempre que uma violação for detectada.
  • penaltyDeath() Mata o processo da aplicação onde o StrictMode foi activado.

Nota:

Não se sinta obrigado a corrigir tudo o que StrictMode encontrar, muitos casos
de acesso a dados são geralmente necessários durante o ciclo de vida normal da
atividade.

Use StrictMode para encontrar coisas que você fez por acaso. Acesso a rede na
Thread principal são quase sempre um problema, nestes casos você deve arranjar
um jeito de os tratar.

Dica:

Use sempre o StrictMode em seus projetos, ele melhora consideravelmente a
performance a de seu aplicativo, ajudando a detectar problemas e falhas no
projecto.

Top comments (1)

Collapse
 
romavicdosanjos profile image
Romavic dos Anjos

Encontrei uma dificuldade na importação de clases...

Qual é o package a ser importado para fazer-se uso da classe Builder.

O android e outras libs possuem o Builder...e estou confuso qual importar.