【问题标题】:Set delay in android在android中设置延迟
【发布时间】:2013-04-30 13:16:04
【问题描述】:
我想在我的应用中显示 1 到 9 个数字作为计数器
TextView te=(TextView)findViewById(R.id.text);
for(int i=0;i<10;i++ ){
try {
te.setText("Number"+i);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
但这并没有给我想要的
我该怎么做
谢谢
【问题讨论】:
标签:
android
for-loop
counter
【解决方案1】:
从不在 UI 线程上设置延迟。相反,使用Handler 及其postDelayed 方法定期执行操作。例如:
//define 'int i = 10;' at global level
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
te.setText("Number"+i);
i--;
handler.postDelayed(this, 1000);
}
});
【解决方案2】:
你可以试试类似这样的代码:
import android.os.Bundle;
import android.view.MotionEvent;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
public class SplashScreen extends Activity {
protected int _splashTime = 5000;
private Thread splashTread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
splashTread = new Thread() {
@Override
public void run() {
try {
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
startActivity(new Intent(SplashScreen.this,
Home.class));
finish();
}
}
};
splashTread.start();
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
synchronized(splashTread)
{
splashTread.notifyAll();
}
}
return true;
}
}
进行必要的更改以使您的产品完美运行。
这只是一个例子。
【解决方案3】:
如果在显示计数器时没有预期用户交互,你所做的应该没问题,只要确保它们在 UI 线程上运行,这可以通过将其放入 runOnUiThread 或创建 Hander 来实现然后postMessage。
如果在计数器增加期间预期用户交互,您可以
创建一个Handler,然后调用postDelayed。