java - 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 的主线程上运行的进程,但是我怎样才能让它们同时发生以防止滞后
解决方案
推荐阅读
- django - Distinct() 不适用于由 union() 产生的查询集
- flutter - 当 onPressed 在 BottomAppBar 图标项上时如何为孩子替换一个小部件
- unity3d - 如何从两个下拉列表中获取值并将它们与 if 进行比较?
- javascript - 如何比较午夜和其他指定时间之间的时间
- linux - 对可以循环遍历值的变量执行 if 选择语句?
- .net - F# - Int32.TryParse 的部分应用
- python-3.x - 使用 ConfigParser 时在配置文件中保留驼峰式大小写和注释
- javascript - 方括号前的逗号 - MDN 文档
- sqlite - sqflite batch.commit() 不适用于颤振
- networking - 如何使在 Virtual Box 中运行的应用程序可通过公共互联网访问