Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Criando apps com alto nível de qualidade (versão longa)

Criando apps com alto nível de qualidade (versão longa)

Palestra ministrada no DevFest Cerrado em 15 de outubro de 2016

Douglas Kayama

October 15, 2016
Tweet

More Decks by Douglas Kayama

Other Decks in Technology

Transcript

  1. @douglasdrumond Por que Policies? • App removido = usuário triste

    • Conta bloqueada = todos os apps removidos = mais usuários tristes
  2. @douglasdrumond Exemplo: Standard design • App follows Android Design guidelines

    and uses common UI patterns and icons: • App does not redefine the expected function of a system icon (such as the Back button).
  3. @douglasdrumond Exemplo: Standard design • App does not redefine or

    misuse Android UI patterns, such that icons or behaviors could be misleading or confusing to users.
  4. @douglasdrumond Exemplo: Notificações • Notificações seguem as guidelines • Múltiplas

    notificações são empilhadas • Persistente somente para evento contínuo • Não contém propagandas, a não ser que usuário tenha optado
  5. @douglasdrumond Exemplo: Notificações • Dispare a notificação e observe todos

    os tipos de notificação que o aplicativo mostra. Expanda as notificações, quando válido (Android 4.1 e superior) e clique em todas as ações apresentadas.
  6. @douglasdrumond Ads • Ads guideline • Não incentive cliques •

    Não misture com UI • Não mostre dois ads ao mesmo tempo • …
  7. @douglasdrumond O que mais? • Tablet? → Tablet App Quality

    • Relógios? → Wear App Quality • Carros? → Auto App Quality • TV? → TV App Quality • Educação? → Education Guidelines
  8. @douglasdrumond Building for Billions • Rede rápida o tempo todo?

    • Nem todos • Telefone top de linha? • Nem todos • Bateria boa? • Ninguém tem
  9. @douglasdrumond StrictMode public void onCreate() { if (DEVELOPER_MODE) { StrictMode.setThreadPolicy(new

    StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); } super.onCreate(); }
  10. @douglasdrumond LeakCanary dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

    } public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)) { // This process is dedicated to LeakCanary for heap analysis. // You should not init your app in this process. return; } LeakCanary.install(this); // Normal app init code... } }
  11. @douglasdrumond LeakCanary • Impacto na performance • release: use no-op

    • test: use no-op
 
 dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' }
  12. @douglasdrumond Referências • https://developer.android.com/distribute/essentials/index.html • https://developer.android.com/distribute/tools/launch- checklist.html • https://developer.android.com/distribute/essentials/quality/ core.html

    • https://developer.android.com/reference/android/os/ StrictMode.html • https://github.com/square/leakcanary • https://realm.io/news/droidcon-ricau-memory-leaks-leakcanary/
  13. @douglasdrumond Contato • [email protected] • @douglasdrumond • Android Dev BR

    Slack • Convite: http://slack.androiddevbr.org • Entre: http://androiddevbr.slack.com/