gpt4 book ai didi

android - CountDownTimer: "Can' t 在尚未调用 Looper.prepare() 的线程内创建处理程序”

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:18 25 4
gpt4 key购买 nike

我知道之前有人问过“无法在没有调用 Looper.prepare() 的线程内创建处理程序”的一般问题,但我很难理解它在这种情况下的应用方式。

我正在尝试在非 UI 线程中构造一个新的 CountDownTimer,我猜这是导致此错误的原因,但我不太明白为什么需要在主线程中使用计时器。据我所知,它似乎有一个回调处理程序,需要在具有循环程序的线程中运行,而非 UI 线程默认情况下没有循环程序。看来我的选择是:1) 让这个非 UI 线程有一个 Looper 或 2) 在我的 UI 线程上创建一些可以构造这个计时器的奇怪方法,这两种方法对我来说都很愚蠢。有人可以帮我理解其中的含义吗?

此外,有人知道任何有用的链接可以阐明 Looper 和 MessageQueue 吗?正如我确信我已经表明的那样,我没有很好地掌握它们。谢谢!

最佳答案

必须在 UI 线程上创建 CountDownTimer 的实例。

如果您有自定义类对象:

public class MyTimer extends CountDownTimer{
public MyTimer(...){
super(duration,interval);
}
//... other code ...//
}

对象的构造必须在UI线程上运行

MyTimer mTimer = new MyTimer(...);   //can throw RuntimeException
// with Looper.prepare() issue if
// caller isn't UI thread

如果多个线程正在创建和销毁计时器,请通过执行以下操作确保它是在 UI 线程上创建的:

MyActivity.runOnUiThread( new Runnable(){
public void run(){
mTimer = new MyTimer(...);
}
});

但请注意上面的代码段如何需要对您的 Activity 和类成员变量 mTimer 的引用

关于android - CountDownTimer: "Can' t 在尚未调用 Looper.prepare() 的线程内创建处理程序”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006547/

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