我有这样的代码:
final Context context = this;
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
new CheckMessageTask(context).execute(); //ERROR
}
}, 2500, 10 * 60 * 1000); //Every 10 Minutes
Timer应每10分钟执行一次CheckMessageTask。 问题是出现此错误:
E/AndroidRuntime: FATAL EXCEPTION: Timer-0
java.lang.ExceptionInInitializerError
at -package-CheckMessageService$1.run(CheckMessageService.java:138)
at java.util.Timer$TimerImpl.run(Timer.java:284)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
... 2 more
CheckMessageTask扩展了Asynctask并且不运行UI代码,所以这不是原因。 该代码在Android Jelly Bean 4.1.2上运行良好,但在Android Gingerbread上运行不正常。 我该如何解决?
答案 0 :(得分:1)
你不能从UI线程执行Asynctask,这是使用Timer
的情况答案 1 :(得分:1)
您的计时器任务在不同的线程上运行。你应该在主ui线程上加载asynctask
检查主题线程规则
下的链接http://developer.android.com/reference/android/os/AsyncTask.html
必须在AsyncTask
上加载UI thread
类。这是从JELLY_BEAN
开始自动完成的。
所以在Jelly bean中它运作良好。