Какова цель Looper и как его использовать? - PullRequest
433 голосов
/ 29 сентября 2011

Я новичок в Android. Я хочу знать, что делает класс Looper, а также как его использовать. Я прочитал документацию по классу Android Looper , но не могу ее полностью понять. Я видел это во многих местах, но не мог понять его цель. Может ли кто-нибудь помочь мне, определив цель Looper, а также приведя простой пример, если это возможно?

Ответы [ 11 ]

0 голосов
/ 27 ноября 2018

Что такое Looper?

ОТ ДОКТОРОВ

Looper

Looper Класс, используемый для запуска цикла сообщений для thread.Потоки по умолчанию не имеют связанного с ними цикла сообщений;чтобы создать его, вызовите prepare() в потоке, который должен запустить цикл, а затем loop(), чтобы он обрабатывал сообщения до тех пор, пока цикл не будет остановлен.

  • A Looper - это цикл обработки сообщений:
  • Важным символом Looper является то, что он связан с потоком, в котором создается Looper
  • Класс Looper поддерживает MessageQueue, который содержит список сообщений.Важным символом Looper является то, что он связан с потоком, в котором создается Looper.
  • Looper назван так, потому что он реализует цикл - берет следующую задачу, выполняет ее, затем принимает следующуюодин и так далее.Handler называется обработчиком, потому что кто-то не может придумать лучшего имени
  • Android Looper - это класс Java в пользовательском интерфейсе Android, который вместе с классом Handler обрабатывает события пользовательского интерфейса, такие как нажатия кнопок,Перерисовки экрана и переключатели ориентации.

Как это работает?

enter image description here

СозданиеLooper

Поток получает Looper и MessageQueue, вызывая Looper.prepare() после его запуска.Looper.prepare() идентифицирует вызывающий поток, создает объект Looper и MessageQueue и связывает поток

SAMPLE CODE

class MyLooperThread extends Thread {

      public Handler mHandler; 

      public void run() { 

          // preparing a looper on current thread  
          Looper.prepare();

          mHandler = new Handler() { 
              public void handleMessage(Message msg) { 
                 // process incoming messages here
                 // this will run in non-ui/background thread
              } 
          }; 

          Looper.loop();
      } 
  }

Дополнительную информацию смотрите ниже post

...