Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-多线程导致应用程序崩溃_Android_Multithreading - Fatal编程技术网

Android-多线程导致应用程序崩溃

Android-多线程导致应用程序崩溃,android,multithreading,Android,Multithreading,嗨,每次我的游戏中有东西被破坏后,我都会在我的surface view线程中使用线程类创建一个爆炸动画的新对象。在短时间内摧毁多艘飞船后,应用程序退出活动。为什么会这样 explosion ex = new explosion(x,y); ex.start(); 及 类爆炸扩展线程实现可运行{ 私人长启动时间; 私有int num=0; 私人INTX; 私营企业; 公共爆炸(int mx,int my){ x=mx; y=我的; startTime=System.currentTimeMill

嗨,每次我的游戏中有东西被破坏后,我都会在我的surface view线程中使用线程类创建一个爆炸动画的新对象。在短时间内摧毁多艘飞船后,应用程序退出活动。为什么会这样

explosion ex = new explosion(x,y);
ex.start();

类爆炸扩展线程实现可运行{
私人长启动时间;
私有int num=0;
私人INTX;
私营企业;
公共爆炸(int mx,int my){
x=mx;
y=我的;
startTime=System.currentTimeMillis();
}
公开募捐{
while(num<3){
长毫秒=System.currentTimeMillis();
drawBitmap(爆炸.get(num),x,y,null);
如果(毫秒-起始时间>50){
startTime=System.currentTimeMillis();
num++;
Log.d(“爆炸”、“动画”);
}
}
Log.d(“爆炸”、“端螺纹”);
}
};

复制自developer.android

无论是否使用AsyncTask,请始终记住以下几点 关于单线程模型的两条规则:

-不要阻塞UI线程

-并确保仅在UI上访问AndroidUI工具包 线

我相信这条线会让你崩溃

canvas.drawBitmap(explosions.get(num),x,y,null);
此链接详细介绍了在另一个线程上更新UI的步骤:


闻起来像是设计问题。为什么要为动画运行线程?
恕我直言,我认为您应该在当前线程中运行它,并使用基于时间的动画。您几乎不需要更改代码,因为它已经是基于时间的。

我相信在另一个线程上编辑UI是不必要的,如果您提供一些日志消息,这会有所帮助。我可以在不中断UI线程的情况下执行吗?我可以使用处理程序,但我不能将x和y传递给itI我假设渲染部分每1/x秒调用一次?然后只需创建对象,并在渲染部分调用爆炸对象的渲染部分。
canvas.drawBitmap(explosions.get(num),x,y,null);