java - 在(毫秒)中设置的特定时间后,timerTask 无法启动

标签 java android timertask

在下面发布的代码中,我从工作线程正在读取的文件中读取时间戳数据。我从 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/

相关文章:

android - Android Gradle任务真的很慢

java - java中Timer的scheduleAtFixedRate()函数的delay和period参数的区别

java - 如何根据 Elasticsearch 中字段出现在左侧的距离对字段进行排序?

java - 使用java.util.logging,是否可以在一段时间后重新启动日志?

java - Android 使整个表格行可点击

javascript - 加载页面后在 webview 的字段中以编程方式输入文本

java - 使用 JAAS 调用方法时出现 AccessControlException

android - 分享 Intent 不适用于 Facebook Messenger

java - 定时器任务和线程以及内部类

c - 如何获取当前时间(以微秒为单位)的结果?