我有一段简单的代码,它启动了一个意图,但是当我调试它时,它会通过各种类,经常让我想知道为什么这些类每次都被调用,以及它们在恢复正常执行之前执行了哪些任务。
然后执行的控制转移到View类并调用performClick()
之后,它会进入Handler类并调用dispatchMessage(Message msg)
,最后,它会多次调用loop()
Looper类,然后才能恢复正常流程
。
那么有人可以在这里帮助我了解幕后发生的事情以及为什么这个 loop() 被多次调用吗?
这loop()
是Looper
课堂的一部分。当您的进程初始化应用程序时,在您的 android 应用程序的深处,JVM 寻找的第一件事是一个入口点,在所有 Java 应用程序中它是主要方法。android main 方法存在于一个名为ActivityThread
(检查活动线程的AOSP )的类中。
这个类的美妙之处在于它做了一些事情,
ActivityThread
调用该prepareMainLooper()
方法。这个。将当前线程初始化为应用程序的主循环器。即这是您的主线程接收其主线程指定的地方,这与运行时的所有其他线程不同。使 android 与大多数桌面/控制台(如 java 应用程序)不同的是Looper类。该类有一个Looper.loop()
在 的 main 方法中调用的ActivityThread
方法,并且由于 a for(;;){}
(双分号表示无限循环),它运行了一个无限循环。这个循环将无限期地继续运行,除非quit()
被外部调用。循环方法在message.next()
每次完成消息时调用,以检索新消息。
简而言之,如果没有这种无限循环的方法,android 就很难有一个基本的方法来异步处理传入的消息,这是 Android 事件驱动本质的核心。循环急切地寻找新消息来处理或传递给处理程序。
如果您有兴趣,请查看AOSP进行更深入的了解!