在另一个 activity 中取消一个 CountDownTimer
Cancel a CountDownTimer in another activity
我在一个 activity 中有一个 CountDownTimer,我需要在另一个 activity 中取消它。我遇到的问题是,即使我在另一个 activity 中调用 endTestTimer() 方法,CountDownTimer 也没有被取消。这是 CountDownTimer 的代码:
private long testMillisLeft, questionMillisLeft;
private static CountDownTimer testTimer;
private void startTestTimer()
{
long startTime = DataHolder.getTestTime()*1000; //getTestTime() is the seconds
testTimer = new CountDownTimer(startTime, 1000) {
@Override
public void onTick(long millisUntilFinished) {
testMillisLeft = millisUntilFinished;
updateTestTimeLeft();
}
@Override
public void onFinish() {
Intent intent = new Intent(MainActivity4.this, MainActivity5.class);
startActivity(intent);
}
}.start();
}
public static void endTestTimer()
{
if(testTimer != null)
{
testTimer.cancel();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
testTimeLeft = (TextView) findViewById(R.id.testTimerTextView);
mathProblem = (TextView) findViewById(R.id.mathProblemTextView);
testTimer = null;
startTestTimer();
}
下面是我尝试在另一个 activity 中取消相同计时器的方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainActivity4.endTestTimer();
}
this related post 上的评论说静态 CountDownTimer 会造成内存泄漏。如果是这样,我如何在另一个 activity 中调用 endTestTimer() 方法并让它取消计时器?或者,如果它不能是静态的,我如何直接访问 testTimer CountDownTimer 并在另一个 activity 中对其调用 .cancel()?
研究 Android 生命周期让我找到了 this post and this post,我发现这两者都非常有帮助。据我了解,当用户点击后退按钮时,会为 currently-displayed activity 调用 onDestroy() 方法,然后为 activity 调用 onCreate() 方法显示。因此,要取消 MainActivity4 上的计时器(在我的例子中是当前 activity),我将这段代码添加到它的 class 文件中:
@Override
protected void onDestroy() {
testTimer.cancel();
questionTimer.cancel();
super.onDestroy();
}
现在,当用户退出 MainActivity4(不管其他 activity 将他们带到什么地方)并且自动调用 onDestroy() 时,两个计时器都会被取消,然后 MainActivity4 会被销毁。这对我来说似乎很好用,但我不确定这样做是否有任何缺点,所以如果有的话请告诉我。
我在一个 activity 中有一个 CountDownTimer,我需要在另一个 activity 中取消它。我遇到的问题是,即使我在另一个 activity 中调用 endTestTimer() 方法,CountDownTimer 也没有被取消。这是 CountDownTimer 的代码:
private long testMillisLeft, questionMillisLeft;
private static CountDownTimer testTimer;
private void startTestTimer()
{
long startTime = DataHolder.getTestTime()*1000; //getTestTime() is the seconds
testTimer = new CountDownTimer(startTime, 1000) {
@Override
public void onTick(long millisUntilFinished) {
testMillisLeft = millisUntilFinished;
updateTestTimeLeft();
}
@Override
public void onFinish() {
Intent intent = new Intent(MainActivity4.this, MainActivity5.class);
startActivity(intent);
}
}.start();
}
public static void endTestTimer()
{
if(testTimer != null)
{
testTimer.cancel();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
testTimeLeft = (TextView) findViewById(R.id.testTimerTextView);
mathProblem = (TextView) findViewById(R.id.mathProblemTextView);
testTimer = null;
startTestTimer();
}
下面是我尝试在另一个 activity 中取消相同计时器的方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainActivity4.endTestTimer();
}
this related post 上的评论说静态 CountDownTimer 会造成内存泄漏。如果是这样,我如何在另一个 activity 中调用 endTestTimer() 方法并让它取消计时器?或者,如果它不能是静态的,我如何直接访问 testTimer CountDownTimer 并在另一个 activity 中对其调用 .cancel()?
研究 Android 生命周期让我找到了 this post and this post,我发现这两者都非常有帮助。据我了解,当用户点击后退按钮时,会为 currently-displayed activity 调用 onDestroy() 方法,然后为 activity 调用 onCreate() 方法显示。因此,要取消 MainActivity4 上的计时器(在我的例子中是当前 activity),我将这段代码添加到它的 class 文件中:
@Override
protected void onDestroy() {
testTimer.cancel();
questionTimer.cancel();
super.onDestroy();
}
现在,当用户退出 MainActivity4(不管其他 activity 将他们带到什么地方)并且自动调用 onDestroy() 时,两个计时器都会被取消,然后 MainActivity4 会被销毁。这对我来说似乎很好用,但我不确定这样做是否有任何缺点,所以如果有的话请告诉我。