android - 生命周期活动秒表
问题描述
我是安卓新手。了解活动的生命周期。我很难理解这里的逻辑。共有三个变量: boolean running
、wasRunning
和 int seconds
。我无法理解里面的代码onStop
和onStart
. 有人可以解释一下我们为什么使用下面共享的代码的逻辑wasRunning
吗?
public void runTimer()
{
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
running = true;
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
running = false;
}
});
reset.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
running = false;
seconds = 0;
}
});
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
int hours = seconds / 3600;
int min = (seconds % 3600) / 60;
int sec = seconds % 60;
String time = String.format("%d:%02d:%02d", hours, min, sec);
text.setText(time);
if (running) {
seconds++;
}
handler.postDelayed(this, 1000);
}
});
}
@Override
protected void onStop() {
super.onStop();
wasRunning=running;
running=false;
}
@Override
protected void onStart() {
super.onStart();
if(wasRunning);
running=true;
}
解决方案
这实际上是非常糟糕的代码。它保持一个持续运行的计时器,并在不运行时使用一个标志来忽略它。相反,当活动停止时,它应该停止计时器以使用更少的 CPU 资源。但这就是它的作用:
OnStop - 当活动在后台运行时,开始忽略计时器事件,并设置一个标志 (wasRunning) 以了解它在上次活动时是否正在运行。
onStart - 如果上次应用程序处于前台时计时器正在运行,则停止忽略计时器事件。
所以这两个函数的组合在后台时会忽略所有的定时器事件,但是当它重新回到前台时会重新开始监听它们。
推荐阅读
- python-3.x - 在 Python 3 中,是否可以在没有 for .. in 表达式的任何调用中使用短路评估?
- sql - 修改案例陈述
- excel - 当一个新元素添加到数组中的非空位置时,我试图将数组中的每个元素向下移动一个位置
- css - 具有 2 列的 CSS 网格以动态适应每行两个项目
- xaml - 在 Collectionview 上设置选择背景颜色并保持材质波纹
- pentaho - 如何使用 ETL Pentaho 检索表的所有数据并将其复制到另一个表中
- javascript - 如何正确地将 React 生产构建文件导入另一个项目?
- html - 仅当找到多个具有类的元素时才应用 CSS
- javascript - 第一次函数调用后没有输出任何内容 - Javascript
- amazon-web-services - AWS 数据传输成本:许多地区的小额费用