首页 > 解决方案 > UI 滞后于使用倒数计时器更新 textview 并在同一活动上具有 textview 选取框

问题描述

我有一个 textView 显示倒数计时器的进度,我还有另一个 textView,当从用户输入获得的长度太长时,我将其设置为选取框。当出现选取框动画并且计时器处于活动状态时,UI 会滞后。如何防止卡顿仍然有UI更新

计时器代码:

  countDownTimer = new CountDownTimer(milliSeconds+100, 1000)
    {
            @Override
            public void onTick(long millisUntilFinished) {
                milliSecTime = (int) millisUntilFinished;
                long millis = millisUntilFinished;
                //Convert milliseconds into hour,minute and seconds


                String hms = String.format(Locale.getDefault(), 
                          "%02d:%02d:%02d",
                        TimeUnit.MILLISECONDS.toHours(millis),
                        TimeUnit.MILLISECONDS.toMinutes(millis) -
                                TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                        TimeUnit.MILLISECONDS.toSeconds(millis) -
                                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

                countDownTimerTextView.setText(hms);

            }

            @Override
            public void onFinish() {

                beepSoundStop.start();
                countDownTimerTextView.setText(R.string.time);

                countNumberOfSets = countNumberOfSets + 1;
                setsTextView.setText(countNumberOfSets + "/" + tNumberOfSets);
                Log.i("CountNumberOfSets", String.valueOf(countNumberOfSets));
                restTimerActive = false;
                timerIsActive = false;
                getNewWorkout();
                Log.i("REST TIMER FINISHED", "TRUE");

            }
        }.start();

这是选取框的java代码:

       workoutNameTextView =  findViewById(R.id.workoutNameTextView);
       workoutNameTextView.setSelected(true);

这是 textView 的 xml:

                       <TextView
                        android:id="@+id/workoutNameTextView"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_toStartOf="@+id/stopFab"
                        android:layout_toEndOf="@id/startAndPauseFAB"
                        android:singleLine="true"
                        android:ellipsize="marquee"
                        android:layout_centerHorizontal="true"
                        android:text="@string/workout"
                        android:textAlignment="center"

                        android:textColor="?attr/colorAccent"
                        android:textSize="@dimen/workoutNameTextSize"
                        android:textStyle="bold" />

我知道这些都是在 UI 的主线程上运行的进程,但是我怎样才能让它们同时发生以防止滞后

标签: javaandroid

解决方案


推荐阅读