我正在使用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的方法
提前致谢
答案 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
的新调度迭代