2014-12-03 65 views
1

在下面的發佈代碼中,我從工作線程讀取的fie中讀取時間戳數據。我從fie解析時間戳並將其傳遞給timerTask,如下所示。我期望結果是Engine Time(ms):的一個讀數,然後是systemTime(ms):的讀數。但在每次運行中,我都會以不同的順序接收輸出?如下所示。timerTask無法在(ms)中設置的特定時間後啓動

請提供解釋fr。

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 

回答

1

我有同樣的問題,我的方式找到解決這個問題是使用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)); 
} 
+0

謝謝你O rthe答案,卜似乎它的Android爲主。我在java中有這個問題。是否有任何解決方案 – user2121 2014-12-03 14:29:22

+0

你包括Android標籤多數民衆贊成那就是爲什麼我回答你,你應該具體..任何方式看看這個鏈接,它可能會幫助你http://stackoverflow.com/questions/2258066/java-run-a -function-後一個特定的用戶號碼的秒\ – 2014-12-03 14:47:32