在执行程序时造成延迟

时间:2016-05-05 11:55:27

标签: java android android-studio

我想在我的代码中创建一个延迟,使得一部分应该在5秒后执行而其他部分应该在10秒之后执行。我尝试过TRY CAtcH线程,但不知道问题出在哪里..这是我的代码好好看一下..感谢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....
            }
            }

3 个答案:

答案 0 :(得分: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 :(得分: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.

答案 2 :(得分:0)

你可以使用Aysnctask,我希望它有所帮助。你可以这样做:

    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;