当循环在runnable中时,重复计时器不起作用

时间:2014-02-13 15:44:47

标签: java android

我正在使用TimerTask和Timers以及android测试一些东西,我注意到如果我把Looper放在run()方法中,TimerTask只运行一次,即使我将它定义为重复。任何想法为什么是那个?

这是MainActivity部分

  Timer timi=new Timer();
  timi.scheduleAtFixedRate(new locac(nok,this),10, 1000);

这里是worker timerTask类

public void run ()


{






    Looper.prepare();


     int loto=23;
                 int lato=23;

     long time=1220227200;

          String test=String.valueOf(lato);
          String test3=String.valueOf(loto);
    String test1=String.valueOf(time);


    dbadapter mkola=new dbadapter(Ctx);
    mkola.openToWrite();

       mkola.insert(test,test1,test3);

 Looper.loop();





 }

一旦我删除了Looper,它就会很好用。 我需要Looper,因为在某一点上我想调用一些启动Handler的方法

提前致谢

1 个答案:

答案 0 :(得分:0)

这是因为您的TimrTask永远不会返回(因为调用Looper.loop()

表单Timertask文档,重点是我的(Oracle文档,Android不是那么清楚)http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html  :

  

对应每个Timer对象的是单个后台线程   用于执行所有计时器的任务,顺序。计时器任务   应该快点完成。如果计时器任务需要过多的时间   完成后,它“占用”计时器的任务执行线程。这可以,在   转,延迟后续任务的执行,这可能会“束缚”   当(和如果)违规任务时快速连续执行   终于完成了。

所以会发生的事情是你的TimerTask是在你的Timer的单个线程中运行的,因为它的run方法永远不会返回它的线程,它不再运行TimerTask的新调度迭代