我开始研究线程,我不明白为什么以下简单代码不起作用。扔掉了:
RuntimeException: can't create handler inside thread that has not called looper.prepare():
这是代码
public void onClick(View v) {
switch (v.getId()) {
case R.id.id1:
Thread th =new Thread(new Runnable() {
public void run() {
update();
delObjects();
addObjects();
}
});
th.start();
break;
}
}
我已经读过,当您尝试修改UI时有时会发生错误,但这不是我的情况。
提前致谢!
答案 0 :(得分:1)
如果您没有访问UI内容,那么您可能正在进行深度线程化。基本上你不能通过取消已经线程化的run()方法来启动一个线程。所以你的方法,
update();
delObjects();
addObjects();
可能正在使用线程,这会导致此问题。在大多数情况下,您不需要这样的线程,因为您已经在UI线程之外,因此您可以跳过在这些函数内部进行线程化。在某些情况下,如果必须在没有运行包装器线程的其他地方使用这些函数,则可能需要在方法本身中包含线程。因此,如果是这种情况,请将代码更改为以下内容。
public void onClick(View v) {
switch (v.getId()) {
case R.id.id1:
Thread th = new Thread(new Runnable() {
public void run() {
//Prepare for further threading.
Looper.prepare();
update();
delObjects();
addObjects();
}
});
th.start();
break;
}
}
希望有所帮助。
答案 1 :(得分:0)
创建线程时,使用var name“th”,但是当你启动线程时,使用“th1”。当你提出问题时,这是一个错字,还是代码中的错误?