由于后台线程,UI无法顺利更新

时间:2014-02-24 19:11:20

标签: java android multithreading

我正在写一个安卓游戏,这就是我所拥有的:

游戏循环实现为:

我创建了一个扩展视图的自定义视图。然后在我的onDraw()方法中,我调用invalidate();

MainActivity:

这里我创建一个自定义视图的实例,并使用setContentView()将其设置为我当前的视图。 我还使用OnTouch()方法来获取触摸事件

一切都很顺利,直到我这样做:

我创建了一个新类Graphthread,在run方法中,我创建了一个循环。

public class Graphthread extends Thread
   {
    @Override
    public void run() { 
         while(true)
       {

        }
    }
     }

然后我在MainActivity中创建了一个这样的实例

Graphthread gth = new Graphthread();

并在我的onCreate方法中使用了gth.start()。

现在发生了以下情况:

游戏运行不顺利。或者我应该说它就像..运行一段时间......微风几毫秒......再次运行......再次冻结等等。

发生了什么事?

2 个答案:

答案 0 :(得分:1)

像这样的轻微抖动听起来像垃圾收集。如果您的后台线程(或其他内容)占用了大量内存,则GC可能需要比预期更频繁地运行。这会引起你所描述的瞬间紧张。

答案 1 :(得分:0)

尝试更适合游戏的方法:使用SurfaceView和后台线程来绘制它。这可以让你摆脱口吃,由主线程的不规则消息处理。

从我的观点来看,

onDraw hack只适用于想要在常规应用程序(而不是游戏)中制作动画的内容,并且动画框架对您没用。例如,平移和缩放图像。