欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

git 撤销挂起的更改_Timer计时任务因系统时间的修改导致挂起解决方案

发布时间:2023/12/10 windows 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 git 撤销挂起的更改_Timer计时任务因系统时间的修改导致挂起解决方案 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

之前开发的一款运行在定制Android设备上的一个实时监控程序发生了一个很奇怪的问题:关机状态下放置了半个月左右的时间之后,再次开机使用,使用到一半的时候,显示界面就卡死在某一个状态下了(显示界面只显示一行文字,代表当前的状态)。取到的log信息里没有任何错误信息,测试也很难再现问题(因为条件较难满足,关机状态下放置半个月)。之后就各种查问题......

终于找到是Timer的问题:如果在启动一个Timer任务之后,进行了系统时间的修改操作,包括系统自动同步网络时间,都有可能导致这个Timer任务挂起。

系统时间修改到当前时间之后,不会影响Timer的执行;但是如果系统时间修改到当前时间之前,就会导致Timer挂起。详见博文:“关于Timer运行时修改系统时间”。

要解决这个问题的话,需要程序在系统时间改变之后主动重启Timer,Android系统在系统时间被修改之后,会发出一条广播:Intent.ACTION_TIME_CHANGED,我们只需要监听这个广播即可。

在onCreate方法或者其它合适的地方注册广播监听方法:

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_TIME_CHANGED);

filter.addAction(Intent.ACTION_DATE_CHANGED);

this.registerReceiver(new TimeChangedReceiver(), filter);

然后实现广播监听器:

public class TimeChangedReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Log.d(TAG, "---onReceive() start!---");

String action = intent.getAction();

if (Intent.ACTION_DATE_CHANGED.equals(action)) {

Log.d(TAG, "---DATE_CHANGED!---");

}

if (Intent.ACTION_TIME_CHANGED.equals(action)) {

mHandlerMsg.sendEmptyMessage(MsgType.RESTARTTIMER);

Log.d(TAG, "---TIME_CHANGED!---");

}

Log.d(TAG, "---onReceive() end!---");

}

}

具体的Timer重启方法放在了Handle中:

final static class MsgType {

...

final static int RESTARTTIMER = 7;

...

}

final Handler mHandlerMsg = new Handler(new Handler.Callback() {

...

@Override

public boolean handleMessage(Message msg) {

switch (msg.what) {

...

case MsgType.RESTARTTIMER: {

try {

timer.cancel();

} catch (Exception e) {

e.printStackTrace();

}

timer = null;

timer = new Timer();

timer.schedule(new firstTask(), 0, TIMER_INTERVAL);

}

break;

...

}

}

...

}

firstTask代码如下:

class firstTask extends TimerTask {

@Override

public void run() {

// TODO do something

}

}

通过以上这种方式就可以解决在修改了系统时间后Timer被挂起的问题。

总结

以上是生活随笔为你收集整理的git 撤销挂起的更改_Timer计时任务因系统时间的修改导致挂起解决方案的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。