java - 在间隔内触发长时间运行操作的脚本会使应用程序崩溃
问题描述
为什么这段代码会使应用程序崩溃并强制我关闭它?
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;
}
}
推荐阅读
- c - 如何在 PowerPC 架构中“无效”或“刷新”一系列 CPU 缓存?
- javascript - 无效的挂钩调用。钩子只能在使用 react-apollo 的函数组件内部调用
- python-3.x - 根据时差对数据框行进行分组
- javascript - 如何在同一页面上管理多个相同的组件,它们各自单独的 axios 请求做出反应?
- structr - 如何在 Structr 中将项目保存为 Web 应用程序
- python - 循环遍历多个 Excel 文件并将每个文件中的数据写入新数据框
- c# - 配置 StructureMap 以选择子类实现而不是基类实现
- python-3.x - TensorFlow 神经网络没有正确优化
- wpf - 我有一个带有复选框的列表,我想仅在选中复选框时调用视图模式的 Selected 属性
- jenkins - Jenkins - Git 克隆命令在 shell 上不起作用