timerTask не может запуститься после определенного времени, установленного в (мс)

В приведенном ниже коде я читаю данные метки времени из файла, который читается рабочим потоком. Я анализирую метку времени из файла fi и передаю ее в 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

person user2121    schedule 03.12.2014    source источник


Ответы (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 ));
}
person Naveed Ali    schedule 03.12.2014
comment
спасибо за ответ, но, похоже, он ориентирован на Android. у меня есть эта проблема в java. есть ли решение - person user2121; 03.12.2014
comment
вы включили тег Android, поэтому я ответил вам, вы должны быть конкретными.. в любом случае посмотрите на эту ссылку, это может помочь вам stackoverflow.com/questions/2258066/\ - person Naveed Ali; 03.12.2014