在时间间隔内触发长时间运行操作的脚本会使应用崩溃



为什么这段代码会使应用程序崩溃并迫使我关闭它?

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();
}
}
}

你需要一个单独的线程。

类似的东西

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;
}
}

这个类正在扩展活动——这意味着它将在主/UI 线程上。您正在调用 Thread.sleep(10000(,这会阻塞主线程 10 秒。这对于Android来说是不好的做法,因为您永远不应该阻塞主线程。尝试从 Thread 或 AsyncTask 继承以获得更好的结果

系统可能会终止无响应的活动。我真的不明白这个"测试"的意义。耗时的事情也不应该在主线程中运行。

最新更新