这loop()
是Looper
课堂的一部分。当您的进程初始化应用程序时,在您的 android 应用程序的深处,JVM 寻找的第一件事是一个入口点,在所有 Java 应用程序中它是主要方法。android main 方法存在于一个名为ActivityThread
(检查活动线程的AOSP )的类中。
这个类的美妙之处在于它做了一些事情,
- 的 main 方法中的 Looper
ActivityThread
调用该prepareMainLooper()
方法。这个。将当前线程初始化为应用程序的主循环器。即这是您的主线程接收其主线程指定的地方,这与运行时的所有其他线程不同。
- 同样在 main 方法中,处理程序负责管理MessageQueue,接收和处理来自您的应用程序的消息。重要的是要注意 [Messages] 可以由 MessageQueue 作为 Runnable 或其他可执行对象执行。
使 android 与大多数桌面/控制台(如 java 应用程序)不同的是Looper类。该类有一个Looper.loop()
在 的 main 方法中调用的ActivityThread
方法,并且由于 a for(;;){}
(双分号表示无限循环),它运行了一个无限循环。这个循环将无限期地继续运行,除非quit()
被外部调用。循环方法在message.next()
每次完成消息时调用,以检索新消息。
简而言之,如果没有这种无限循环的方法,android 就很难有一个基本的方法来异步处理传入的消息,这是 Android 事件驱动本质的核心。循环急切地寻找新消息来处理或传递给处理程序。
如果您有兴趣,请查看AOSP进行更深入的了解!