CountDownTimer:“不能内螺纹已不叫Looper.prepare创建处理程序()”
-
25-09-2019 - |
题
我知道“不能内螺纹已不叫Looper.prepare创建处理程序()”已被问过的一般问题,但我很努力去了解它如何适用于这种情况。
我试图构建一个非UI线程,这是我的猜测是这个错误的原因一个新CountDownTimer,但我真的不明白为什么那么定时器需要在主线程中使用。从我所看到的,它看起来像它有一个回调处理程序,需要在具有活套,其中非UI线程默认情况下不会有一个线程中运行。看来我的选择是:1)使此非UI线程有一个活套或2)使我的UI线程一些奇怪的方法,可以构建此计时器,这两者似乎愚蠢的我。有人可以帮助我理解其含意?
另外,确实的,关于活套和的MessageQueue揭示任何有用的链接任何人都知道?我不掌握得很好,因为我相信我已经展示。谢谢!
解决方案
在定时器不需要在一个UI线程。但我的猜测是你更新的用户界面,显示该线程倒计时计数。俞不能做到这一点。
使用一个的AsyncTask和onProgressUpdate
更新UI
其他提示
CountDownTimer的实例必须在UI线程上创建。
如果您有自定义类对象:
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(...);
}
});
但通知上面的代码段需要如何您的活性和对类成员变量mTimer参考
不隶属于 StackOverflow