gpt4 book ai didi

java - Android Gingerbread : Can't create handler inside thread that has not called Looper. 准备()

转载 作者:行者123 更新时间:2023-12-02 06:58:04 25 4
gpt4 key购买 nike

我有这样的代码:

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

计时器应每 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 上运行不佳。我该如何修复它?

最佳答案

您的计时器任务在不同的线程上运行。您应该在主 ui 线程上加载 asynctask

检查下面主题“线程规则”下的链接

http://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask 类必须在 UI 线程 上加载。从 JELLY_BEAN 开始,此操作会自动完成。

所以在 Jelly bean 中效果很好。

关于java - Android Gingerbread : Can't create handler inside thread that has not called Looper. 准备(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com