2014-03-27 51 views
0

在一个发布方法中插入数据到另一个数据库中的数据库执行更新SQLite抛出异常,我需要暂停和恢复线程。我的计划是运行一种方法来查询我的数据库,以免造成错误。Android应用中的暂停计时器

我的计时器,

cron = new Timer(); 
    cron.schedule(scanTask = new TimerTask() { 
     @Override 
     public void run() { 
      startService(new Intent(getBaseContext(), CronPush.class)); 
     } 
    }, 0, 30000); 



@Override 
    protected Void doInBackground(Void... arg0) { 
     cron.cancel(); 
     Sincronizacion s = new Sincronizacion(); 
     s.sincronizarBD(MenuEvento.this, codigoEvento); 
     resume(); 
     return null; 
    } 


public void resume() { 
    cron = new Timer(); 
    cron.schedule(scanTask = new TimerTask() { 
     @Override 
     public void run() { 
      startService(new Intent(getBaseContext(), CronPush.class)); 
     } 
    }, 0, 30000); 
} 


03-27 23:19:49.520: E/AndroidRuntime(4603): FATAL EXCEPTION: AsyncTask #3 

03-27 23:19:49.520:E/AndroidRuntime(4603):了java.lang.RuntimeException:执行doInBackground() 03-27 23发生错误: 19:49.520:E/AndroidRuntime(4603):at android.os.AsyncTask $ 3.done(AsyncTask.java:299) 03-27 23:19:49.520:E/AndroidRuntime(4603):在java.util.concurrent .FutureTask.finishCompletion(FutureTask.java:352) 03-27 23:19:49.520:E/AndroidRuntime(4603):at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 03-27 23 :19:49.520:E/AndroidRuntime(4603):在java.util.concurrent.Future Task.run(FutureTask.java:239) 03-27 23:19:49.520:E/AndroidRuntime(4603):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 03-27 23: 19:49.520:E/AndroidRuntime(4603):在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573) 03-27 23:19:49.520:E/AndroidRuntime(4603):在java。 lang.thread.run(Thread.java:856) 03-27 23:19:49.520:E/AndroidRuntime(4603):引起:java.lang.IllegalStateException:TimerTask已安排 03-27 23:19: 49.520:E/AndroidRuntime(4603):在java.util.Timer.scheduleImpl(Timer.java:572) 03-27 23:19:49.520:E/AndroidRuntime(4603):在java.util.Timer.schedule Timer.java:481) 03-27 23:19:49.520:E/AndroidRuntime(4603):at com.androidaz.scanner.MenuEvento.resume(MenuEvento.java :266) 03-27 23:19:49.520:E/AndroidRuntime(4603):at com.androidaz.scanner.MenuEvento $ sincronizarBD.doInBackground(MenuEvento.java:216) 03-27 23:19:49.520:E/AndroidRuntime(4603):at com.androidaz.scanner.MenuEvento $ sincronizarBD.doInBackground(MenuEvento.java:1) 03-27 23:19:49.520:E/AndroidRuntime(4603):at android.os.AsyncTask $ 2。调用(AsyncTask.java:287) 03-27 23:19:49.520:E/AndroidRuntime(4603):在java.util.concurrent.FutureTask.run(FutureTask.java:234)

回答

0

使用Timer.cancel()下降如果异常被抛出,则在创建新的Timer对象之后再次调度。使用Timer,您不能暂停/恢复它,只需永久取消即可。

TimerTask cronTimerTask = new TimerTask() { 
    @Override 
    public void run() { 
     startService(new Intent(getBaseContext(), CronPush.class)); 
    } 
}; 

Timer cron = new Timer(); 
cron.schedule(cronTimerTask, 0, 30000); 

@Override 
protected Void doInBackground(Void... arg0) { 
    if (cron != null) { 
     cron.cancel(); 
     cron.purge(); 
    } 
    Sincronizacion s = new Sincronizacion(); 
    s.sincronizarBD(MenuEvento.this, codigoEvento); 
    resume(); 
    return null; 
} 


public void resume() { 
    try { 
     cron = new Timer(); 
     cron.schedule(cronTimerTask, 0, 30000); 
    } catch (Throwable e) { 
     cron = null; 
    } 
} 
+0

编辑POST并显示错误信息,让我按照你说的去做,看看你能否帮助我。 – Nico1991

+0

提到的错误,请加我的帖子。 – Nico1991

+0

编辑,尝试新版本 –