Android:对于画布动画,最好有一个大线程,或者一些小线程

Android:对于画布动画,最好有一个大线程,或者一些小线程,android,multithreading,memory-management,drawing,android-canvas,Android,Multithreading,Memory Management,Drawing,Android Canvas,我制作了一个应用程序,可以触发不同的小动画,比如一颗旋转的流星或者一个从下到上浮动的文本,在surfaceview上用画布制作动画 一旦被点燃,它们都是不变的, 所以我计划了两种方法,一种是大线程 处理所有动画,每个动画一个接一个地更新 或者对于每种类型的动画,例如流星,都有自己的线程设置,在每个给定点,主要活动可以有一个命令进入其中一个线程,创建他,然后开始,而不是忘记他,让他在后台运行,在动画结束时,线程将自行结束 所以我不必担心存储每个被触发的线程,因为我不知道在给定的时间可以启动多少个线

我制作了一个应用程序,可以触发不同的小动画,比如一颗旋转的流星或者一个从下到上浮动的文本,在surfaceview上用画布制作动画

一旦被点燃,它们都是不变的, 所以我计划了两种方法,一种是大线程 处理所有动画,每个动画一个接一个地更新

或者对于每种类型的动画,例如流星,都有自己的线程设置,在每个给定点,主要活动可以有一个命令进入其中一个线程,创建他,然后开始,而不是忘记他,让他在后台运行,在动画结束时,线程将自行结束

所以我不必担心存储每个被触发的线程,因为我不知道在给定的时间可以启动多少个线程

那么,随机启动小的短线程还是用一个大线程来处理所有的线程,会更有效地提高内存利用率呢?它会更顺利更好地工作吗

这些动画只是为了视觉附魔,不做任何其他事情,也不与其他动画交互,只是开始、循环、结束


我希望您理解:\

在动画期间,您必须在
UI线程上更新您的UI
您不能使用其他线程来运行动画。但是,对于密集型动画,您必须使用
游戏引擎
或编写自己的
游戏线程
,该线程将首先根据动画公式更新对象数据,然后在
UI线程
上绘制对象。您可能需要一个线程来处理所有绘图。每个动画有一个线程似乎过于复杂。每个动画类型当然可以有一个方法,例如,
renderStars()
renderText()
,等等,只要一个动画线程渲染,就会调用这些方法

建议阅读:

  • 我已经链接到了“在表面视图”部分,但是您可能应该阅读大部分文档
  • 在线代码在谷歌最近修改了他们的开发者网站后,目前正在更新中,但是这个链接显示了在SDK管理器中找到代码的位置

所以你基本上是说,我不能让几个线程来完成这样的任务,我需要一个线程,在这种情况下,一个“UI线程”可以处理所有的动画,对吗?还有,它到底在什么时候变成密集的动画?@DanielMendel这是错误的。所有视图方法都必须在UI线程上调用,但是您可以而且可能应该在第二个线程上设置动画。SurfaceView是专门针对这一点设计的,并且有一些方法可以简化同步。