我是android新手。
了解活动的生命周期。
我在这里很难理解逻辑。
有三个变量:
布尔running
,wasRunning
和整数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;
}
答案 0 :(得分:1)
这实际上是非常糟糕的代码。它保持一个连续运行的计时器,并在不运行时使用标志忽略它。相反,当活动停止时,应停止计时器以使用较少的CPU资源。但这是它的作用:
OnStop-当活动处于后台时,开始忽略计时器事件,并设置一个标志(wasRunning)以知道活动在上一次活动时是否在运行。
onStart-如果计时器在上一次使应用程序前台运行时正在运行,请停止忽略计时器事件。
所以这两个功能的组合将在后台时忽略所有计时器事件,但是在重新获得前景时再次开始监听它们。