2012-04-07 3 views
0

Вы можете мне помочь? я осуществил исполнитель и scheduledWithFixedDelay, но он делает это только один раз .... И я хочу, чтобы выполнить эту задачу в повторяющемся образом ...Повторная задача Android не работает

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); 
    executor.scheduleWithFixedDelay(new Runnable(){ 

     public void run() { 
      updateList(); 
     } 

    }, updateTime, updateTime, TimeUnit.MINUTES); 

Что я делаю неправильно?

Заранее спасибо.

+0

Опасайтесь, '' TimeUnit.MINUTES' не будет существовать на Android '' (http://stackoverflow.com/questions/3472423/android-java-util-concurrent-timeunit-convert-milliseconds-to-minutes) –

ответ

0

Похоже, вы делаете это правильно. Который заставил меня прочитать в java-документах, и вот что я нашел, что я нахожу удивительным.

Если какое-либо выполнение задачи встречает исключение, последующие исполнения будут подавлены.

ScheduledExecutorService.scheduleWithFixedDelay()

Есть ли шанс, что код в работоспособном производит исключение, которое вызывает запланированный Исполнитель прекратить выполнение? Неужели вы бы упомянули об этом?

Но, как я уже сказал, я нахожу это удивительным для чтения, поскольку я думал, что запланированный исполнитель обрабатывает исключения, так что последующее выполнение задачи НЕ подавляется. И это одна из главных причин, которые следует предпочесть вместо классического Timer. Но теперь я вижу в javadoc, что я, по-видимому, ошибся ...

Я не очень хорошо знаком с платформой Android, но, возможно, есть разница в возможностях java.util.concurrent между JVM от Oracle и Dalvik от Android, поэтому JVM JVM от Oracle не может быть хорошей идеей в конце концов.

EDIT: Действительно Javadoc метода фабрики говорит, что

(Заметим, однако, что если один поток завершается из-за сбоя во время выполнения до выключения, новый займет свое место, если необходимы для выполнения последующих задач)

Executors.newSingleThreadScheduledExecutor()

EDIT2:. Java-документ Oracle и Dalvik кажется практически неотличимым.

+0

Метод updateList может запускаться в исключение, но все исключения, которые возможны, обрабатываются с помощью try и catch. – user1238516

+0

Что делать, если вы попробуете с очень простой логикой в ​​Runnable, что-то вроде просто system.out.println («только что было выполнено в« + new Date()). Также вы можете попробовать с ScheduledExecutorService.newScheduledThreadPool (int corePoolSize), чтобы узнать, не отличается ли поведение. – Svilen

+0

Я знаю, в чем проблема сейчас. В моем методе updateList() я написал notifyDataSetChanged(). Это должно «уведомить» datalist, что что-то изменилось в данных. Но с помощью этого метода в моем коде «задача» никогда не останавливается, и поэтому он не может начать снова .... – user1238516