Come verificare se il thread corrente non è thread principale

Ho bisogno di controllare se il thread che esegue un determinato codice è il thread principale (UI) o no. Come posso raggiungere questo objective?

  • Elimina il log di chiamata in android per un numero particolare
  • +1 clic non funziona nell'integrazione di Android con Google+
  • Come risolvere "nome della directory di risorse non valida", risorsa "crunch"
  • Android e IOException - errore strano
  • DateUtils.getRelativeTimeSpanString per le date future
  • File JAR di Android Studio che ha causato il limite di overhead GC ha superato l'errore
  • Come impedire l'avvio dell'applicazione quando si utilizza il lancio dopo l'archivio?
  • Android LayerDrawable.setDrawableByLayerId non funziona su HTC Sensation (e altri?)
  • Imansible connettersi al server Openfire (utilizzando api smack)
  • Debug di un'applicazione WebView (Ionic) su Android tramite logcat
  • Perché bloccare glClear in OpenGLES?
  • Funzione di trascinamento / discesa nello studio Android non funzionante
  • 6 Solutions collect form web for “Come verificare se il thread corrente non è thread principale”

    Looper.myLooper() == Looper.getMainLooper() 

    se questo restituisce true, allora sei sul thread UI!

    puoi usare il codice sottostante per sapere se il thread corrente è thread UI / Main o no

     if(Looper.myLooper() == Looper.getMainLooper()) { // Current Thread is Main Thread. } 

    oppure puoi anche usarlo

     if(Looper.getMainLooper().getThread() == Thread.currentThread()) { // Current Thread is Main Thread. } 

    Ecco una domanda simile

    Il modo migliore è il modo più chiaro: *

     Thread.currentThread() == Looper.getMainLooper().getThread() 

    Oppure, se la piattaforma di runtime è API 23 (Marshmallow 6.0) o superiore:

     Looper.getMainLooper().isCurrentThread() 

    Vedere l' API Looper . Si noti che call Looper.getMainLooper() coinvolge la sincronizzazione (vedere la sorgente ). Potresti voler evitare l'overhead memorizzando il valore di return e riutilizzandolo.

    * credito greg7gkb

    Riassumendo le soluzioni, penso che sia la cosa migliore:

      boolean isUiThread = VERSION.SDK_INT >= VERSION_CODES.M ? Looper.getMainLooper().isCurrentThread() : Thread.currentThread() == Looper.getMainLooper().getThread(); 

    E se si desidera eseguire qualcosa nel thread UI, è ansible utilizzare questo:

      new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { //this runs on the UI thread } }); 

    è ansible verificarlo in android ddms logcat where id di process sarà lo stesso, ma il thread id sarà diverso.

    È ansible provare Thread.currentThread () isDaemon ()

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.