您好我设置一个线程来运行一些需要带有looper的线程的代码。任务将需要一段时间,它不能在主线程上。我已经做了很多谷歌搜索,但我似乎无法让这个工作。任何帮助表示赞赏。谢谢。
private HandlerThread handlerThread = new HandlerThread("My HandlerThread");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
checkIfWeAreOnMain();
}
});
void checkIfWeAreOnMain() {
if(Looper.getMainLooper().getThread() == Thread.currentThread()){
//I'm getting true here
}
}
答案 0 :(得分:1)
处理程序将始终在您启动它的线程上运行。它的目的是为了做到这一点。
如果您需要在后台运行一些非常好且简单的回调,请使用AsyncTask。
AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent包提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。