簡體   English   中英

如何在不凍結我的應用程序的情況下運行循環?

[英]How to run loop without freezing my app?

循環凍結了我的應用程序,但完成后,應用程序可以正常工作。 我嘗試在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);

    }

    }
});


}

Thread由一個button啟動

start.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        status = 1;
        sendthread.start();

}

我通過將status設置為0來停止線程

嘗試使用AsyncTask 開始在進度onPreExecute功能,並呼吁cancelonPostExecute doInBackground內部,您可以調用sleep。 這不會使您的應用程序崩潰,並且您不會覺得該應用程序沒有響應。

創建一個Runnable,它將在其run方法中具有循環的代碼。 然后制作第二個Runnable,發布到UI線程。

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

想要多次循環調用該方法

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

維護布爾值變量以控制內部循環,並保持外部無限循環以阻止線程終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM