Java 活动更改时,倒计时计时器不会停止
我用过一个有定时器功能的类。所以我可以随时重复使用这些代码。问题是,当我从一个活动移动到另一个活动时,计时器应该重置,但计时器无法完成,新的计时器将再次启动。这是我的密码Java 活动更改时,倒计时计时器不会停止,java,android,eclipse,performance,countdowntimer,Java,Android,Eclipse,Performance,Countdowntimer,我用过一个有定时器功能的类。所以我可以随时重复使用这些代码。问题是,当我从一个活动移动到另一个活动时,计时器应该重置,但计时器无法完成,新的计时器将再次启动。这是我的密码 public class Utils { Context mContext; private static final String TAG = Utils.class.getSimpleName(); CountDownTimer mCountDownTimer = null; boolea
public class Utils {
Context mContext;
private static final String TAG = Utils.class.getSimpleName();
CountDownTimer mCountDownTimer = null;
boolean isRunning = false;
private Activity activityContext;
public Utils(Context context) {
this.mContext = context;
this.activityContext = (Activity) context;
}
public void resetTimer() {
if (isRunning) {
Log.d(TAG, "Timer is stopping now..######");
mCountDownTimer.cancel();
mCountDownTimer = null;
isRunning = false;
startCountDownTimer();
} else {
Log.d(TAG, "Timer is starting now..######");
startCountDownTimer();
}
}
public void stopCountDownTimer() {
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
mCountDownTimer = null;
}
}
public void startCountDownTimer() {
mCountDownTimer = new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
Log.d(TAG, "Timer is ticking..!!!!");
isRunning = true;
}
public void onFinish() {
Log.d(TAG, "Timer is finished..!!!!");
isRunning = false;
try {
Intent launchIntent = mContext.getPackageManager()
.getLaunchIntentForPackage("com.#########.###");
activityContext.startActivity(launchIntent);
activityContext.finish();
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
在ActivityCreate方法中,我调用这个resetTimer()
,但计时器不会重置。我还调用了stopCountDownTimer()
,结果将是相同的。我错过了什么
已解决:
public class Utils {
Context mContext;
private static final String TAG = Utils.class.getSimpleName();
CountDownTimer mCountDownTimer = null;
boolean isRunning = false;
private Activity activityContext;
private final long startTime = 10 * 1000;
private final long interval = 1 * 1000;
public Utils(Context context) {
this.mContext = context;
this.activityContext = (Activity) context;
mCountDownTimer = new MyCountDownTimer(startTime, interval);
}
public void resetTimer() {
if (isRunning) {
Log.d(TAG, "Timer is stopping now..######");
mCountDownTimer.cancel();
mCountDownTimer = null;
mCountDownTimer = new MyCountDownTimer(startTime, interval);
isRunning = false;
Log.d(TAG, "Timer is stopped amd starting again..######");
mCountDownTimer.start();
// startCountDownTimer();
} else {
Log.d(TAG, "Timer is starting now..######");
// startCountDownTimer();
mCountDownTimer.start();
}
}
}
public void stopCountDownTimer() {
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
mCountDownTimer = null;
}
}
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
Log.d(TAG, "Timer is finished..!!!!");
isRunning = false;
try {
Intent launchIntent = mContext.getPackageManager()
.getLaunchIntentForPackage("com.####.####");
activityContext.startActivity(launchIntent);
activityContext.finish();
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onTick(long millisUntilFinished) {
Log.d(TAG, "Timer is ticking..!!!!");
//Toast.makeText(mContext, ""+millisUntilFinished/1000, 50).show();
isRunning = true;
}
}
}
你是如何实例化你的Utils类的?您是如何确保它是单例的?onTick()和onFinish()的@Override注释在哪里?如果我使用CountDownTimer扩展任何类,那么Override方法将生成,但我只使用这个函数@Opiatefuchstry添加mCountDownTimer.cancel();mCountDownTimer=null;isRunning=false;进入onFinish()方法中。。。不要调用重置或停止倒计时的方法。我已经将函数改为类,现在它可以正常工作了。。谢谢@aditiparikh您是如何实例化您的Utils类的?您是如何确保它是单例的?onTick()和onFinish()的@Override注释在哪里?如果我使用CountDownTimer扩展任何类,那么Override方法将生成,但我只使用这个函数@Opiatefuchstry添加mCountDownTimer.cancel();mCountDownTimer=null;isRunning=false;进入onFinish()方法中。。。不要调用重置或停止倒计时的方法。我已经将函数改为类,现在它可以正常工作了。。谢谢@AditiParikh