ska*_*kaz 5 multithreading android looper countdowntimer
我知道之前已经问过“无法在没有调用 Looper.prepare() 的线程内创建处理程序”的一般问题,但我很难理解它在这种情况下如何应用。
我正在尝试在非 UI 线程中构造一个新的 CountDownTimer,我猜这是导致此错误的原因,但我真的不明白为什么需要在主线程中使用计时器。从我所见,它似乎有一个回调处理程序,需要在具有循环程序的线程中运行,非 UI 线程默认情况下没有。看来我的选择是:1)让这个非 UI 线程有一个 Looper 或 2)在我的 UI 线程上做一些奇怪的方法来构造这个计时器,这两种方法对我来说都很愚蠢。有人可以帮助我理解其中的含义吗?
另外,有没有人知道任何有用的链接可以阐明 Looper 和 MessageQueue?我没有很好地掌握它们,正如我确信我已经展示的那样。谢谢!
CountDownTimer 的实例必须在 UI 线程上创建。
如果您有自定义类对象:
public class MyTimer extends CountDownTimer{
public MyTimer(...){
super(duration,interval);
}
//... other code ...//
}
Run Code Online (Sandbox Code Playgroud)
对象的构造必须在UI线程上运行
MyTimer mTimer = new MyTimer(...); //can throw RuntimeException
// with Looper.prepare() issue if
// caller isn't UI thread
Run Code Online (Sandbox Code Playgroud)
如果多个线程正在创建和销毁计时器,请确保它是在 UI 线程上创建的,方法如下:
MyActivity.runOnUiThread( new Runnable(){
public void run(){
mTimer = new MyTimer(...);
}
});
Run Code Online (Sandbox Code Playgroud)
但请注意上面的代码段如何需要对您的 Activity 和类成员变量 mTimer 的引用
计时器不需要位于 UI 线程中。但我的猜测是您正在更新 UI 以显示该线程中的倒计时计数。宇不能这么做。
使用 asynctask 并更新 UIonProgressUpdate
| 归档时间: |
|
| 查看次数: |
5486 次 |
| 最近记录: |