Обработчик пост-задержки не изменяется в течение менее 10 миллисекунд - PullRequest
0 голосов
/ 07 апреля 2019

Я создал два TextViews и обновил их содержимое с помощью двух разных обработчиков, по одному для каждого TextView.Я увеличиваю два счетчика в обоих обработчиках, по одному в каждом, и публикую их значения в соответствующем TextView.

Мой первый обработчик тикает в соответствии со значением переменной длинной скорости, а второй обработчик тикает в 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());
        }
    }
}

Это хорошо, пока значение скорости не станет 10 или выше, но как только я установлю значение скорости на 1, оба обработчика будут работать с одинаковой продолжительностью или скоростью.Первый обработчик должен работать со скоростью 1, а второй обработчик должен работать со скоростью 10, но оба работают со скоростью 10 мс.

EDIT

Короче говоря,минимальная задержка, с которой работает postDelayed, составляет 10 мс, не менее этого, не 1, не 5, не менее 10. Мне нужно запустить исполняемый файл с задержкой в ​​5 мс в проекте.

Можете ли вы предложитьгде я не прав?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...