在下面发布的代码中,我从工作线程正在读取的文件中读取时间戳数据。我从 fie 中解析时间戳并将其传递给 timerTask
,如下所示。我预计结果是一次读取 Engine Time(ms):
,然后读取 systemTime(ms):
。但是在每次运行时我都会以不同的顺序接收输出?如下所示。
请解释一下。
static TimerTask timedTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("timed task");
}
};
private static void processFile(File dataFile) throws IOException {
// TODO Auto-generated method stub
Timer timer = new Timer();
for (int i = 1; i <= logfile.getTotalLines(); i++) {
System.out.println("Engine Time(ms): " +
logfile.getFileHash().get(i).getTimeStampInMilli());
timer.schedule(new TimerTask2(), (long)
logfile.getFileHash().get(i).getTimeStampInMilli());
}
timer.cancel();
}
第一次运行后的结果:
Engine Time(ms): 0.012999999999
Engine Time(ms): 0.044000000002
Engine Time(ms): 0.044000000002
Engine Time(ms): 0.063999999998
Engine Time(ms): 0.074000000001
Engine Time(ms): 0.084000000003
Engine Time(ms): 0.093999999997
Engine Time(ms): 0.093999999997
Engine Time(ms): 0.103999999999
Engine Time(ms): 0.114000000001
systemTime(ms): 1417614184001
第二次运行后的结果:
Engine Time(ms): 0.012999999999
Engine Time(ms): 0.044000000002
Engine Time(ms): 0.044000000002
Engie Time(ms): 0.063999999998
Engine Time(ms): 0.074000000001
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
Engine Time(ms): 0.084000000003
Engine Time(ms): 0.093999999997
systemTime(ms): 1417614304811
Engine Time(ms): 0.093999999997
systemTime(ms): 1417614304811
Engine Time(ms): 0.103999999999
systemTime(ms): 1417614304811
Engine Time(ms): 0.114000000001
systemTime(ms): 1417614304811
最佳答案
我遇到了同样的问题,我发现解决这个问题的方法是使用 AlarmManager 类
这是例子
BroadcastReceiver br;
AlarmManager alarmManager;
在 onCreate() 中调用:
setupAlarmManager();
alarmManager.set( AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime() +
10000, pi );
方法:
private void setupAlarmManager() {
br = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent i) {
alarmManager.set(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime() +
10000, pi );
}
};
registerReceiver(br, new IntentFilter("urPackageName") );
pi = PendingIntent.getBroadcast( context, 0, new Intent("urPackageName"),
0 );
alarmManager = (AlarmManager)(context.getSystemService( Context.ALARM_SERVICE ));
}
关于java - 在(毫秒)中设置的特定时间后,timerTask 无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27273490/