我创建了两个TextView,并通过两个不同的处理程序更新了它们的内容,每个TextView都有一个。我在两个处理程序中增加了两个计数器,每个计数器增加了一个,并将它们的值发布到各自的TextView中。
我的第一个处理程序是根据long speed变量的值进行滴答,而第二个处理程序是在10次之后进行滴答。
public class Main extends Activity{
private View root;
private final Context context = this;
private int count1 = 0, count2 = 0;
private TextView view1, view2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
private void init() {
setContentView(R.layout.s_main);
root = findViewById(R.id.root);
view1 = findViewById(R.id.txv1);
view2 = findViewById(R.id.txv2);
//
ViewTreeObserver vto = root.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
root.getViewTreeObserver().removeOnPreDrawListener(this);
startRuns();
return true;
}
});
}
private void startRuns() {
try {
final long sleep = 10;
final Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
view1.setText(String.valueOf(count1++));
handler1.postDelayed(this, sleep);
}
}, 1);
final Handler handler2 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
view2.setText(String.valueOf(count2++));
handler2.postDelayed(this, sleep * 10);
}
}, 1);
Threads.run = true;
} catch (Exception ex) {
Alerts.alert(context, ex.getMessage());
}
}
}
这很好,直到speed的值等于或大于10,但是当我将speed的值设置为1时,两个处理程序都以相同的持续时间或速度工作。第一个处理程序应以1的速度工作,第二个处理程序应以10的速度工作,但两者都以10 ms的速度工作。
编辑
简而言之,postDelayed运行的最小延迟是10毫秒,不小于10毫秒,不是1,不是5,至少是10。我需要在项目中以5毫秒的延迟运行可运行对象。
您能建议我错了吗?