为什么此代码会使应用程序崩溃并迫使我关闭它?
public class ThreadE extends Activity implements OnClickListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setText("Do Time Consuming task!");
setContentView(button);
button.setOnClickListener(this);}
public void onClick(View v) {
try {
for(int i=0; i<10; i++) {
System.out.println(i);
Thread.sleep(10000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
你需要一个单独的线程。
像这样的东西
public class ThreadEActivity extends Activity implements OnClickListener, Runnable {
private boolean running = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setText("Do Time Consuming task!");
setContentView(button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (!running) { // prevent many threads when click repeats
new Thread(this).start(); // Start the run method
}
}
@Override
public void run() {
this.running = true;
try {
for(int i=0; i<10; i++) {
System.out.println(i);
Thread.sleep(10000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
running = false;
}
}
答案 1 :(得分:0)
此类正在扩展Activity - 这意味着它将位于Main / UI线程上。你正在调用Thread.sleep(10000),它阻塞主线程10秒。对于Android来说这是不好的做法,因为你永远不应该阻止主线程。尝试继承Thread或AsyncTask以获得更好的结果
答案 2 :(得分:0)
系统可能会杀死无响应的活动。我并没有真正看到这一点&#34;测试&#34;。耗时的东西也不应该在主线程中运行。