Android 为什么主线程是UI线程?

Android 为什么主线程是UI线程?,android,multithreading,Android,Multithreading,Android选择将主线程作为UI线程有什么原因吗 在单个非线程或线程池上进行所有计算,然后仅在需要绘制某些内容时,才将其传递给UI处理程序,这不是更容易吗 有人可能会说,您仍然可以将所有工作卸载到后台线程,然后发布到UI——但更多的是关于心态。如果默认情况下它是脱离UI线程的,那么开发人员会更加小心地在UI线程上发布什么以及不发布什么 我不是在这里争论这是否是一个有效的选择-我更感兴趣的是为什么主线程默认为UI线程?可能是为了让更多的人开发应用程序。如果你刚开始编程,你需要做的第一件事就是创建

Android选择将主线程作为UI线程有什么原因吗

在单个非线程或线程池上进行所有计算,然后仅在需要绘制某些内容时,才将其传递给UI处理程序,这不是更容易吗

有人可能会说,您仍然可以将所有工作卸载到后台线程,然后发布到UI——但更多的是关于心态。如果默认情况下它是脱离UI线程的,那么开发人员会更加小心地在UI线程上发布什么以及不发布什么


我不是在这里争论这是否是一个有效的选择-我更感兴趣的是为什么主线程默认为UI线程?

可能是为了让更多的人开发应用程序。如果你刚开始编程,你需要做的第一件事就是创建一个新的UI类,我想你已经害怕这个困难了。

可能是为了让更多的人开发应用程序。如果你刚开始编程,你需要做的第一件事就是创建一个新的UI类,我想你已经害怕这个困难了。

这是一个同步的问题,用户的动作和图形界面中显示的结果必须遵循严格的顺序,显然,在一个UI线程中更容易做到这一点。这是一个同步问题,用户的操作和图形界面中显示的结果必须遵循严格的顺序,显然,在一个UI线程中更容易做到这一点

为什么主线程默认为UI线程

现在,当我写这篇文章时,是2017年12月

关于线程模型,Android的架构是在2005-2007年的某个时间段创建的。瞧,它是十多年前创建的

当时:

  • 用于移动设备的应用程序非常简单

  • 移动设备CPU是单核的,其运行速度仅为当今核心速度的一小部分(例如,33MHz、66MHz、133MHz)

  • Dalvik是纯解释的(没有JIT,没有AOT)

当您在缓慢的环境中运行并且线程同步的开销太大(解释语言加剧了这种情况)时,拥有“一个神奇线程”的方法是一种典型的嵌入式系统解决方案。考虑到我们在应用程序中没有做太多的尝试,这是一个合理的选择。创建多个线程、在它们之间传递控制等等,都会增加相当大的开销,这在当时是无法承受的

在2005年,当CPU速度与今天相当时,mirror universe Android团队可能做出了不同的决定,可能包括为UI工作提供更灵活的线程。另外,队里所有的男人都会留山羊胡子

为什么主线程默认为UI线程

现在,当我写这篇文章时,是2017年12月

关于线程模型,Android的架构是在2005-2007年的某个时间段创建的。瞧,它是十多年前创建的

当时:

  • 用于移动设备的应用程序非常简单

  • 移动设备CPU是单核的,其运行速度仅为当今核心速度的一小部分(例如,33MHz、66MHz、133MHz)

  • Dalvik是纯解释的(没有JIT,没有AOT)

当您在缓慢的环境中运行并且线程同步的开销太大(解释语言加剧了这种情况)时,拥有“一个神奇线程”的方法是一种典型的嵌入式系统解决方案。考虑到我们在应用程序中没有做太多的尝试,这是一个合理的选择。创建多个线程、在它们之间传递控制等等,都会增加相当大的开销,这在当时是无法承受的


在2005年,当CPU速度与今天相当时,mirror universe Android团队可能做出了不同的决定,可能包括为UI工作提供更灵活的线程。另外,队里所有的男人都会留山羊胡子。

编程容易。如果默认情况下所有工作都在一个线程上完成,则不必担心同步、锁定或其他任何问题。考虑到没有接受过正式CS培训的Android开发者的数量,这可能是一个明智的选择


实际上,从v21开始,有一个单独的渲染线程。在onDraw中传递给视图的画布不再绘制,它累积绘制命令,然后将该绘制命令列表放入队列。渲染线程每16毫秒(每秒60次)唤醒一次,并实际绘制命令列表。

编程容易。如果默认情况下所有工作都在一个线程上完成,则不必担心同步、锁定或其他任何问题。考虑到没有接受过正式CS培训的Android开发者的数量,这可能是一个明智的选择


实际上,从v21开始,有一个单独的渲染线程。在onDraw中传递给视图的画布不再绘制,它累积绘制命令,然后将该绘制命令列表放入队列。渲染线程每16毫秒(每秒60次)唤醒一次,并实际绘制该命令列表。

我认为它是以这种方式实现的,因为:

  • 简单性-您可以做一些简单的事情,而不需要在主线程中直接绑定大量的/IO计算,而完全不需要了解线程
  • 效率与任何UI操作都需要线程间通信的模型相比。在一个线程中执行一个小计算和所有UI操作更有效
    我想说,它是以这种方式实施的,因为:

  • 简单性-您可以做一些简单的事情,而不需要在主线程中直接绑定大量的/IO计算,而完全不需要了解线程
  • 效率与任何UI操作都需要线程间通信的模型相比。信息技术