为什么这个Runnable在由使用HandlerThread中的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
    }
}

处理程序将始终在启动它的线程上运行。它就是这样设计的。

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

AsyncTask被设计成一个围绕线程和处理程序的助手类,并不构成通用的线程框架。AsyncTasks最好用于短操作(最多几秒钟)。如果需要长时间保持线程运行,强烈建议您使用java.util.courrent包提供的各种API,如Executor、ThreadPoolExecutor和FutureTask。

相关内容

最新更新