嗨,每次在我的游戏中销毁某些东西后,我会通过在我的表面视图线程中使用线程类来创建一个爆炸动画的新对象。在短时间内摧毁多艘船后,应用程序退出活动。这是为什么?
explosion ex = new explosion(x,y);
ex.start();
和
class explosion extends Thread implements Runnable{
private long startTime;
private int num = 0;
private int x;
private int y;
public explosion(int mx, int my){
x = mx;
y = my;
startTime = System.currentTimeMillis();
}
public void run(){
while(num < 3){
long millis = System.currentTimeMillis();
canvas.drawBitmap(explosions.get(num),x,y,null);
if(millis - startTime > 50){
startTime = System.currentTimeMillis();
num++;
Log.d("Explosion","Animate");
}
}
Log.d("Explosion","End Thread");
}
};
答案 0 :(得分:2)
从developer.android复制......
无论您是否使用AsyncTask,请始终记住这些 关于单线程模型的两条规则:
- 不要阻止UI线程,
- 并确保仅在UI上访问AndroidUI工具包 线程。
我相信这条线让你崩溃......
canvas.drawBitmap(explosions.get(num),x,y,null);
此链接详细说明了在另一个线程上更新UI的步骤:
http://developer.android.com/resources/articles/painless-threading.html
答案 1 :(得分:0)
它闻起来像一个设计问题。你为什么要为动画运行一个线程? 在充分尊重的情况下,我认为您应该在当前线程中运行它并使用基于时间的动画。您几乎不需要更改代码,因为它已经基于时间。