如何在不冻结我的应用程序的情况下运行循环?

时间:2016-03-31 11:39:40

标签: java android multithreading for-loop

循环冻结我的应用程序,但在完成后,应用程序正常工作。我尝试在Thread中运行循环,它在没有冻结应用程序的情况下运行良好。但现在的问题是,如果我执行应用程序崩溃,我无法再次运行相同的循环,因为我们无法重新启动Thread。我希望以一种不冻结应用程序并且可以再次运行的方式运行循环。我该怎么办?

我的MainActivity课程中的代码:

protected Thread sendthread;

@Override
protected void onCreate(Bundle savedInstanceState) {

 sendthread = new Thread(new Runnable () {

    @Override
    public void run() {

  for(int i=0;i<amount;i++){

            if  (status == 0){

                break;  

            }

             SmsManager sms = SmsManager.getDefault();
      sms.sendTextMessage(phoneNumber.getText().toString(),null,messagetoSend, null, null);

    }

    }
});


}

Threadbutton

启动
start.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        status = 1;
        sendthread.start();

}

我通过将status设置为0

来停止线程

4 个答案:

答案 0 :(得分:2)

尝试使用AsyncTask。在onPreExecute功能中启动进度条,然后在cancel中致电onPostExecute。在doInBackground里面你可以叫睡觉。这不会导致您的应用崩溃,您也不会觉得应用没有响应。

答案 1 :(得分:1)

创建一个Runnable,它将具有在其run方法中循环的代码。然后创建一个发布到UI线程的第二个Runnable。

 Runnable myRunnable = new Runnable() {
     @Override
 public void run() {
       while (testByte == 0) {
            Thread.sleep(1000); // 1 Second delay
            String updateWords = updateAuto(); // make updateAuto() return a string
            myTextView.post(new Runnable() { 
                 @Override
                 public void run() {
                      myTextView.setText(updateWords);
                 });
       }
}

之后,您可以使用Runnable创建线程并启动它 像这样:

Thread myThread = new Thread(myRunnable);
myThread.start();

答案 2 :(得分:1)

多次调用方法循环

private void loopInAnotherThread() {
   new Thread(new Runnable() {
       public void run() {
           // Your loop
       }
   }).start();
}

答案 3 :(得分:0)

维护一个布尔变量来控制内部循环和一个外部无限循环来阻止线程终止。