对于每个Android-dummy,我也会遇到FATAL EXCEPTION
java.lang.IllegalThreadStateException: Thread already started
滚动论坛和问题,我看到线程无法启动两次。我见过这样的答案:
“不止一次启动线程并不是一个好主意。”
“线程只能被调用一次。”
但是没有人说为什么线程只能被调用一次。对我来说听起来很奇怪,有一个Android功能只能被召唤一次。
为什么只能调用一次线程?
我正在开发一个应用程序,每次点击屏幕时我都要调用动画。我认为Thread可能是最适合我的工具。我错了吗?
更新
也许问题不明确。
我不是在问为什么线程在活着时无法重启。
我在问为什么我已经运行但现在已完成的线程(因此它不存在)不能再次调用。
这是我的代码完全简化。线程在onCreate
第一次调用,第二次在onClick
调用,因此当我点击图像时。
在第二次调用时,我可以从Android Monitor
看到线程不是活着的,尽管它还没有启动。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
chiamaDatabase();
RESET.start();
ImageView image = (ImageView) findViewById(R.id.imageView2);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!RESET.isAlive()) {
RESET.start();
}
}
});
}
public Thread RESET = new Thread() {
public void run() {
final ImageView image = (ImageView) findViewById(R.id.imageView2);
Random random = new Random();
int n = random.nextInt(2);
image.setX(320+n);
image.setY(400+n);
}
};
答案 0 :(得分:0)
你应该看一下Thread是什么:https://en.wikipedia.org/wiki/Thread_(computing)
启动已经运行的线程是没有意义的,因此,当有人试图启动已经运行的线程时,语言必须选择做什么:
Java选择了第二个,我认为这是最好的事情。
如果你真的必须再次启动线程,那么你将无法使用Java。查看此链接,描述Java中线程的生命周期:http://www.roseindia.net/java/thread/life-cycle-of-threads.shtml
您还可以参考其他StackOverflow线程:How can a dead thread be restarted?