Existe uma maneira robusta de detectar se Thread.currentThread()
o thread de IU do sistema Android está em um aplicativo?
Eu gostaria de colocar algumas afirmações em meu código de modelo que afirmam que apenas uma thread ( por exemplo, a thread ui) acessa meu estado, para garantir que nenhum tipo de sincronização seja necessária.
117
Respostas:
A prática comum para determinar a identidade do UI Thread é por meio do Looper # getMainLooper :
A partir da API de nível 23, há uma abordagem um pouco mais legível usando o novo método auxiliar isCurrentThread no looper principal:
fonte
Acho que a melhor maneira é esta:
fonte
equals
pois estamos apenas comparando referências e, além disso, ambas são estáticas.A partir do nível 23 da API, ele
Looper
possui um método auxiliar interessanteisCurrentThread
. Você pode obter omainLooper
e ver se é o único para o tópico atual desta forma:É praticamente o mesmo que:
mas poderia ser um pouco mais legível e fácil de lembrar.
fonte
Mas requer nível de API 23
fonte
Além de verificar o looper , se você já tentou fazer logout do ID do thread
onCreate()
, poderá encontrar o ID do thread de IU (thread principal) sempre igual a 1. Portantofonte
Você não poderia usar o
runOnUiThread
método naActivity
aula? Veja ..http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
fonte