延迟后不到10毫秒的处理程序不会受到影响

时间:2019-04-07 13:09:29

标签: android multithreading view handler postdelayed

我创建了两个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毫秒的延迟运行可运行对象。

您能建议我错了吗?

0 个答案:

没有答案