android - 可运行在 removeCallBacks 之后停止。如何重新启动可运行
问题描述
我正在开发一个小型运动计时器应用程序和 android 编程新手。除其他外,该应用程序显示了用户一个接一个地执行的活动,以及使用两个可运行文件的经过时间。在单击开始按钮时调用 runTimer()。当用户单击暂停按钮时,将调用 removeCallBacks。
问题是当用户暂停和恢复时,活动的显示不会恢复。如果在恢复时调用 runTimer(),我会看到经过的时间运行得很快,并且活动也很快显示出来,而不是一秒钟的延迟。
代码如下
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
myContext = binding.getRoot().getContext();
defPackageR = myContext.getPackageName();
binding.startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pT_status = true;
running = true;
elapsedTimeAtStart = SystemClock.elapsedRealtime();
runTimer();
}
});
binding.pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pT_status = false;
running = false;
}
});
binding.resumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pT_status = true;
running = true;
// runTimer();
}
});
}
runTimer如下
public void runTimer(){
final Handler handler = new Handler();
final Handler handlertime = new Handler();
handlertime.post(new Runnable() {
@Override
public void run() {
// if running increment the seconds
if (!running) {
handlertime.removeCallbacks(this);
} else {
// do stuff to display elapsed time
seconds++;
handlertime.postDelayed(this, 1000);
}
}
});
handler.post(new Runnable () {
@Override
public void run() {
if (pT_status) {
// do stuff here to display activities
handler.postDelayed(this, contentDuration);
} else {
handler.removeCallbacks(this);
handlertime.removeCallbacks(this);
}
}
});
}
解决方案
推荐阅读
- python - 如何使用 gspread_dataframe.set_with_dataframe 并保持 googlesheet 原始格式?
- python - 字符串索引超出范围问题
- macos - 如何在 OSX catalina 中运行未签名的系统扩展?
- css - 确保文本不换行
- python - 为什么 Python 打印字符串这么慢?
- netsuite - 网络套件。已保存的搜索,如何加入另一个表
- c++ - 从 c 运行 nvidia-smi
- python-3.x - Python 3.7:我想将整个类作为变量传递,如何使用类型提示来指示变量是一个类?
- flutter - 如何获取列表中不重复的值?(飞镖 - 颤振)
- sql - 计算百分比显示只有 100 perc PostgreSQL