为什么Runnable在由HandlerThread的Looper构造的Handler发布之后在主线程上运行?

时间:2015-11-24 18:46:40

标签: android multithreading handler

您好我设置一个线程来运行一些需要带有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
    }
}

1 个答案:

答案 0 :(得分:1)

处理程序将始终在您启动它的线程上运行。它的目的是为了做到这一点。

如果您需要在后台运行一些非常好且简单的回调,请使用AsyncTask

  

AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent包提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。