首页 > 解决方案 > 在间隔内触发长时间运行操作的脚本会使应用程序崩溃

问题描述

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

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

标签: javaandroidmultithreading

解决方案


你需要一个单独的线程。

像这样的东西

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

推荐阅读