我想在我的代码中创建一个延迟,使得一部分应该在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....
}
}
答案 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;