Android 为什么Looper类中的loop()会被多次调用

Android 为什么Looper类中的loop()会被多次调用,android,debugging,android-handler,android-looper,Android,Debugging,Android Handler,Android Looper,我有一段简单的代码,它启动了一个意图,但当我调试它时,它会通过各种类,经常让我想知道为什么每次调用这些类,以及它们在返回正常执行之前执行什么任务 然后,执行控制转移到视图类并调用performClick() 然后,它转到处理程序类并调用dispatchMessage(Message msg) 最后,在返回到正常流之前,它多次调用Looper的loop()。 有人能帮我理解引擎盖下发生了什么,以及为什么这个循环()会被多次调用吗 loop()是活套类的一部分。在android应用程序的深处,当

我有一段简单的代码,它启动了一个意图,但当我调试它时,它会通过各种类,经常让我想知道为什么每次调用这些类,以及它们在返回正常执行之前执行什么任务

然后,执行控制转移到视图类并调用
performClick()

然后,它转到处理程序类并调用
dispatchMessage(Message msg)
最后,在返回到正常流之前,它多次调用Looper的
loop()
。 有人能帮我理解引擎盖下发生了什么,以及为什么这个循环()会被多次调用吗

loop()是
活套
类的一部分。在android应用程序的深处,当您的进程初始化应用程序时,JVM首先寻找的是入口点,在所有Java应用程序中,入口点是主要方法。android main方法存在于名为
ActivityThread
的类中(检查活动线程)

这门课的美妙之处在于它做了一些事情

  • ActivityThread
    的main方法中的活套调用
    prepareMainLooper()
    方法。这将当前线程初始化为应用程序的主循环器。i、 e这是主线程接收其mainthread指定的位置,它在运行时不同于所有其他线程
  • 同样在main方法中,处理程序负责管理接收和处理来自应用程序的消息的位置。重要的是要注意,[消息]可以作为可运行或其他可执行对象由MessageQueue执行
  • android与大多数桌面/控制台类java应用程序的不同之处在于类。该类有一个
    Looper.loop()
    方法,该方法在
    ActivityThread
    的主方法中调用,并且由于(;;){}的
    而运行无限循环(双分号表示无限循环)。除非外部调用
    quit()
    ,否则此循环将继续无限期运行。循环方法每次完成一条消息时都调用
    message.next()
    ,以检索新消息

    简言之,如果没有这种无限循环方法,android将很难有一种异步处理传入消息的基本方法,这是android事件驱动特性的核心。循环急切地寻找要处理或传递给处理程序的新消息

    如果你有兴趣的话,请检查一下潜水深度

    loop()
    活套
    类的一部分。在android应用程序的深处,当您的进程初始化应用程序时,JVM首先寻找的是入口点,在所有Java应用程序中,入口点是主要方法。android main方法存在于名为
    ActivityThread
    的类中(检查活动线程)

    这门课的美妙之处在于它做了一些事情

  • ActivityThread
    的main方法中的活套调用
    prepareMainLooper()
    方法。这将当前线程初始化为应用程序的主循环器。i、 e这是主线程接收其mainthread指定的位置,它在运行时不同于所有其他线程
  • 同样在main方法中,处理程序负责管理接收和处理来自应用程序的消息的位置。重要的是要注意,[消息]可以作为可运行或其他可执行对象由MessageQueue执行
  • android与大多数桌面/控制台类java应用程序的不同之处在于类。该类有一个
    Looper.loop()
    方法,该方法在
    ActivityThread
    的主方法中调用,并且由于(;;){}的
    而运行无限循环(双分号表示无限循环)。除非外部调用
    quit()
    ,否则此循环将继续无限期运行。循环方法每次完成一条消息时都调用
    message.next()
    ,以检索新消息

    简言之,如果没有这种无限循环方法,android将很难有一种异步处理传入消息的基本方法,这是android事件驱动特性的核心。循环急切地寻找要处理或传递给处理程序的新消息


    如果你有兴趣的话,请检查一下潜水深度

    请参阅
    android/app/ActivityThread.java
    源文件并非所有人都知道handler looper或多线程在android中的幕后工作原理以及与此相关的问题,除非它无效,否则在任何意义上都不应被否决,如果有人否决了你的评论请参见
    android/app/ActivityThread.java
    源文件并非所有人都知道handler looper或多线程在android中的幕后工作原理以及相关问题。除非无效,否则在任何意义上都不应否决该评论。如果有人否决,请至少添加你的评论