2016-05-05 48 views
0

我想在我的代碼中創建一個延遲,使得一部分應該在5秒後執行,另一部分在10秒後執行。我試圖嘗試捕捉線程,但不知道哪裏是問題。這裏是我的代碼好心看看吧..在adavnce感謝....創建延遲執行程序

// This portion to be executed after 5 seconds 

       val1 = Integer.parseInt(String.valueOf(unit.getText())); 
       val2 = Integer.parseInt(String.valueOf(unit2.getText())); 
       result = val1 + val2; 

       val = Integer.toString(result); 
      int len = val.length(); 

       if (len == 1) { 

        num1 = Integer.parseInt(String.valueOf(val.toString().charAt(len - 1))); 

        unitanswer1.setText(Integer.toString(num1)); 
        unitanswer2.setText(Integer.toString(0)); 
        unitanswer2.setVisibility(View.INVISIBLE); 

       } else { 
        num1 = Integer.parseInt(String.valueOf(val.toString().charAt(len - 1))); 
        unitanswer1.setText(Integer.toString(num1)); 

        num2 = Integer.parseInt(String.valueOf(val.toString().charAt(len - 2))); 
        unitanswer2.setText(Integer.toString(num2)); 
       } 

//要執行此部分10秒後

   val1 = Integer.parseInt(String.valueOf(tens.getText())); 
      val2 = Integer.parseInt(String.valueOf(ten2.getText())); 
      val3=Integer.parseInt(String.valueOf(unitanswer2.getText())); 

      result = val1 + val2 + val3; 

      val = Integer.toString(result); 
      len = val.length(); 

      if (len == 1) { 

       num1 = Integer.parseInt(String.valueOf(val.toString().charAt(len - 1))); 

       tenanswer1.setText(Integer.toString(num1)); 
       tenanswer2.setText(Integer.toString(0)); 
       tenanswer2.setVisibility(View.INVISIBLE); 

      } 
      else { 
       num1 = Integer.parseInt(String.valueOf(val.toString().charAt(len - 1))); 
       tenanswer1.setText(Integer.toString(num1)); 

       num2 = Integer.parseInt(String.valueOf(val.toString().charAt(len - 2))); 
       tenanswer2.setText(Integer.toString(num2)); 

       //Animation's work to be done here..... 
       //remaining possibilites of addition.... 
      } 
      } 
+0

使用兩['Timer'](https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html)秒。 –

+0

好心編輯我的代碼 –

+0

http://stackoverflow.com/questions/1921514/how-to-run-a-runnable-thread-in-android – Manish

回答

3

試試這個:

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // This portion to be executed after 5 seconds 
      ... 
     } 
    },5*1000); 

這:

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //This portion to be executed after 10 seconds 
      ... 
     } 
    },10*1000); 

希望它可以幫助你。

1

一個通用的功能是:

/** 
* This function runs some actions after some delay 
* 
* @param delayInMilliSeconds the time delay in ms 
* @param runnable   the action to perform after the delay 
* @return the Handler object, with which one can cancel this action. 
*/ 
public static Handler runDelayedAction(int delayInMilliSeconds, Runnable runnable) { 
    final Handler handler = new Handler(); 
    handler.postDelayed(runnable, delayInMilliSeconds); 
    return handler; 
} 

用法:

Handler h = runDelayedAction(5000, new Runnable() { 
    @Override 
    public void run() { 
     //DoSthYouLike(); 
    } 
}); 

h.cancel(); //You can even cancel this at your own discretion. 
0

您可以使用Aysnctask,我希望它能夠helps.You如下操作:

SplashAsyncTask = new SplashAsyncTask(); 
    asyncTask.execute(SPLASH_TIME); 

而且SplashAsynctask看起來像

 public class SplashAsyncTask extends AsyncTask<Integer, Integer, Void>{ 
     @Override 
     protected Void doInBackground(Integer... integers) { 
       SystemClock.sleep(integers[0]); 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      if(!isCancelled()){ 
       "do whatever task you have to do" 
     } 
    } 

定義SPLASH_TIME爲:

private static final int SPLASH_TIME=3000;