描述问题:Android开发定时器问题,APP进入某界面自动触发的定时器10秒打印一次输出,如何保证定时器在后台一直跑的情况下,下次进入某界面时不会自动的再次触发?
遇到情况:定时器因为是自动的触发,所以说只要到了某界面就会自动的触发一次,导致随着自动触发的次数的增多就开启了很多个定时器,打印输出就没有任何规律可言了。
当前代码:下面的代码自动触发开启定时器之后,只要APP在运行状态,不清除app后台的运行就会一直跑,因为进入APP某界面自动触发,所以会触发很多个定时器,最后定时器的定时输出就没有什么规律可言了。
// 初始化定时器--10秒钟打印一次输出
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//这里写的是逻辑,用输出语句代替 10秒打印一次
System.out.println("定时器正在运行...");
}
}, 0, 10 * 1000); //delay: 从定时器初始化成功 开始启动的延迟时间。period:定时器的间隔时间
希望各位大神在上面的代码的基础上,可以帮帮我想一个解决的办法,定时器这个东西把我绕的有些晕了!希望附上一个详细的代码,再次感谢各位大佬,感激不尽!
你写在活动的时候,每次进入活动都会创建一个新的定时器。如果只要一个定时器,你应该考虑把定时器写在server上,或者在Application里面写一个静态对象。写一个调用的时候的初始化方法,并且在APP被干掉的时候中止定时器。
public class App extends Application {
//APP是否被干掉
public static boolean isDestory=false;
//定时器是否已经创建
public static boolean isHave=false;
public static void initTimer(){
if (!isHave){
isHave=true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if (isDestory){
//APP被干掉,结束定时器
isHave=false;
cancel();
}else {
Log.e("TAG", "run: ");
}
}
},200,1000*10);
}
}
@Override
public void onTerminate() {
isDestory=false;
super.onTerminate();
}
}
用server,后台启动一个进程做上述操作;
在页面销毁时,移除掉定时任务
@Override
protected void onDestroy() {
super.onDestroy();
timer.cancel();
}