我知道“不能内螺纹已不叫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参考

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top