Android开发人员:重新安排计时器和计时器任务

Android开发人员:重新安排计时器和计时器任务,android,timer,Android,Timer,我有一项看起来非常繁琐的任务,即重新安排计时器和TimerTask,以使我的服务/正在进行的流程能够在不同的时间执行…我尝试搜索了许多论坛,包括似乎对此人有用的论坛,但当我在服务中尝试相同的代码时,我得到以下错误: 03-04 14:21:41.204:E/AndroidRuntime(336):致命异常:计时器-0 03-04 14:21:41.204:E/AndroidRuntime(336):java.lang.RuntimeException:无法在未调用Looper.prepare()

我有一项看起来非常繁琐的任务,即重新安排计时器和TimerTask,以使我的服务/正在进行的流程能够在不同的时间执行…我尝试搜索了许多论坛,包括似乎对此人有用的论坛,但当我在服务中尝试相同的代码时,我得到以下错误:

03-04 14:21:41.204:E/AndroidRuntime(336):致命异常:计时器-0

03-04 14:21:41.204:E/AndroidRuntime(336):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序。

有人知道这个错误意味着什么吗?可能的解决方案是什么?从我在线研究的关于这个错误的内容来看:它通常发生在我尝试在非UI线程上进行UI更改时……在我的情况下,我所做的只是发送一个通知,然后调用一个重调度程序函数,如该示例中所示

感谢您的任何意见

编辑: 以下是其爆炸的代码:

    public void reScheduleTimer(long duration) {
    Log.v(TAG, "Inside reScheduleTimer");
    timer.cancel();
    timer = new Timer("profileSwitcherTimer", true); 
    timerTask = new MyTimerTask(); <----
    timer.schedule(timerTask, duration);
}

}您正在没有消息循环的线程上创建处理程序。正如文件所说:

默认情况下,线程没有与之关联的消息循环; 要创建一个,请在要运行循环的线程中调用prepare(), 然后循环(),让它处理消息,直到循环停止


解决这一问题的一种方法是使用接受一个循环器的处理程序构造函数,将处理程序实例显式绑定到特定的循环器。最简单的方法是只使用应用程序的主活套;你可以通过静态方法得到它。缺点是,这会将处理程序绑定到UI线程,而UI线程本身并不坏,只要您不在其上执行太长的操作;否则,您的UI将变得无响应。

您可以发布引发异常的代码块吗?如果我们能看到你已经写了什么,那会更有帮助。@Robert:用我正在使用的代码片段编辑了原始帖子……天哪……我简直不敢相信……我一定花了很多时间试图理解为什么这会突然爆发……在处理程序中,我所做的只是输出一个Toast消息……我不明白的是,即使我不调用updateUI,
TimerTask
实例的构造函数隐式调用
updateUI
处理程序的构造函数,这导致崩溃。
public class MyTimerTask extends TimerTask{
private Handler updateUI = new Handler(){
        public void dispatchMessage(Message msg) {
            Toast.makeText(getApplicationContext(), "Timer Ran", Toast.LENGTH_LONG).show();
        }
}

public void run() {
    ....code that i want execute
    showNotification();
    reScheduleTimer(60000);
}