C'è un modo efficace per rilevare se Thread.currentThread()
è il thread dell'interfaccia utente del sistema Android in un'applicazione?
Vorrei inserire alcuni asserzioni nel mio codice modello che asserisca che solo un thread (ad es. il thread ui) accede al mio stato, per garantire che non sia necessario alcun tipo di sincronizzazione.Come rilevare il thread dell'interfaccia utente su Android?
risposta
Impossibile si utilizza il metodo runOnUiThread
nella classe Activity
vedere ..
La mia applicazione funziona, ma ha diversi autori e sta diventando piuttosto grande e complessa. Quello che voglio fare è aggiungere una rete di sicurezza extra, un asserzione che cattura il misstake se qualcuno chiama un metodo progettato per essere chiamato solo dal thread della GUI da un altro thread. – ParDroid
Attualmente sto correggendo un bug in cui l'uso di runOnUiThread fa lampeggiare l'UX. – fobbymaster
pratica comune per determinare l'identità del thread UI è via Looper#getMainLooper:?
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
// On UI thread.
} else {
// Not on UI thread.
}
http://stackoverflow.com/questions/11411022/how-to-check-if-current-thread-is-not-main-thread Anche questa risposta è piacevole) – UnknownJoe
penso il modo migliore è questo:
if (Looper.getMainLooper().equals(Looper.myLooper())) {
// UI thread
} else {
// Non UI thread
}
Oltre a verificare crochet, se avete mai provato a disconnessione filo id in onCreate()
, si potrebbe trovare il filo UI (thread principale) id è sempre uguale a 1. Pertanto
if (Thread.currentThread().getId() == 1) {
// UI thread
}
else {
// other thread
}
Non riesco a trovare alcuna documentazione ufficiale che confermi che questo è vero, e lo sarà sempre. Avete un link? –
Questo è quello che ho trovato in logcat quando voglio monitorare il comportamento multi-thread. Puoi provare a produrre l'ID del thread – yushulx
. Ti consigliamo vivamente di non farlo perché questo valore potrebbe essere specifico per il tuo dispositivo e/o versione di Android. Anche se fosse il caso su ogni dispositivo Android in questo momento, non c'è alcuna garanzia che continuerà ad essere il caso nelle versioni successive. Salvare l'ID del thread in un membro della classe quando si esegue onCreate() sembra un po 'più ragionevole per me. – personne3000
public boolean onUIThread() {
return Looper . getMainLooper() . isCurrentThread() ;
}
Ma richiede il livello API 23
Buono a sapersi! –
A partire dal livello API 23 il Looper
ha un bel metodo di supporto isCurrentThread
. Si potrebbe ottenere il mainLooper
e vedere se è quella per il thread corrente in questo modo:
Looper.getMainLooper().isCurrentThread()
E 'praticamente lo stesso di:
Looper.getMainLooper().getThread() == Thread.currentThread()
ma potrebbe essere un po' più leggibile e più facile da ricordare .
- 1. Come rilevare se siamo su un thread dell'interfaccia utente?
- 2. Su Cocoa Touch/UIKit, come rilevare le modifiche all'interfaccia utente da un thread in background?
- 3. Test Android Junit4 sul thread dell'interfaccia utente
- 4. Che cos'è Android UiThread (thread dell'interfaccia utente)
- 5. Prendendo il calcolo pesante dal thread dell'interfaccia utente Android
- 6. Limite thread su Android?
- 7. Come posso rilevare l'input tattile su Android
- 8. Un modo semplice per rilevare dove il thread ui si sta bloccando su Android?
- 9. Come rilevare foto scure su Android
- 10. Come posso ottenere il nome utente google su Android?
- 11. python: come rilevare quando il mio thread diventa orfano?
- 12. Xcode Thread 1: È sempre il thread dell'interfaccia utente principale?
- 13. Thread di sfondo vs thread dell'interfaccia utente
- 14. onLocationChanged callback viene effettuato su quale thread? Il thread principale dell'interfaccia utente?
- 15. Come interrompere il thread asynctask in Android?
- 16. come interrompere il thread ASyncTask in Android
- 17. Accesso a GoogleMap dall'esterno del thread dell'interfaccia utente in Android
- 18. Quando il thread di lavoro funziona, l'interfaccia utente diventa instabile
- 19. Come evitare che Admob blocchi il thread dell'interfaccia utente
- 20. Eseguire più thread dell'interfaccia utente
- 21. Esegui il programma Android come utente root
- 22. Come rilevare quale app è aperta su Android
- 23. Gestione thread android onPause
- 24. android - chiamata il thread ui dal thread di lavoro
- 25. Android - è possibile rilevare il sorriso?
- 26. Android: possibile che il thread in background si blocchi finché il thread dell'interfaccia utente non termina l'operazione?
- 27. Android: modo corretto per passare un messaggio dal thread in background al thread dell'interfaccia utente?
- 28. Come testare correttamente il metodo di chiamata dell'interfaccia utente su un altro thread?
- 29. Elementi dell'interfaccia utente iOS porting su Android
- 30. Come rilevare il reindirizzamento dei file su Windows VirtualStore?
Vedere la mia risposta qui: http://stackoverflow.com/a/41280460/878126 –