我正在尝试实施倒计时,以警告用户离开某个区域时。为此,我试图在JobIntentService中使用CountdownTimer。但是,这意味着CountdownTimer处于线程中,而没有循环程序会引发异常。
java.lang.RuntimeException: Can't create handler inside thread Thread[AsyncTask #1,5,main] that has not called Looper.prepare()
我找到了这个Question on a CountdownTimer in its own thread with looper,但是答案有6-7岁了,我希望对线程和处理程序使用最佳实践。
如果任何人都可以以一种更清洁的方式对如何做到这一点有所了解,那将是不胜感激的。
答案 0 :(得分:0)
始终使用Looper创建处理程序。
1)创建者UI处理程序以更新UI
Handler mainThreadhandler = new Handler(context.getMainLooper());
mainThreadhandler.post(new Runnable(){
public void run(){
// UI work
}
});
2)创建线程处理程序,以运行后台任务。
HandlerThread bgThread = new HandlerThread("MyHandlerThread");
bgThread.start();
Handler bgHandler = new Handler(bgThread.getLooper());
bgHandler.post(new Runnable(){
public void run(){
// background work
}
});
不要忘记在完成活动时进行清理。
@Override
public void onDestroy() {
bgHandler.getLooper().quit();
super.onDestroy();
}