在后台线程中运行处理程序消息

2022-09-01 01:53:24

我想在后台线程中运行一些Runnable。我想使用Handler,因为它方便延迟。我的意思是

handler.post(runnable, delay);

其中 runnable 应该在后台线程中运行。是否可以创建这样的处理程序?某个地方是否有“背景”Looper,或者我如何创建它?

附言:我知道如何使用自定义类扩展线程来做到这一点,但它需要比处理程序方式更多的编码工作。因此,请不要发布其他解决方案或类似内容

handler.post(new Runnable() {
    @Override
    public void run() {
        new Thread() {
            @Override
            public void run() {
                //action
            }
        }.start();
    }
});

我只是徘徊是否汉德勒能以“干净”的方式做到这一点。


答案 1

您只需执行以下操作:

private Handler mHandler;

private HandlerThread mHandlerThread;

public void startHandlerThread(){
    mHandlerThread = new HandlerThread("HandlerThread");
    mHandlerThread.start();
    mHandler = new Handler(mHandlerThread.getLooper());
}

然后调用:

mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
          // Your task goes here
        }
    },1000);

答案 2

你可以试试这样的东西

    private void createHandler() {
        Thread thread = new Thread() {
            public void run() {
                Looper.prepare();

                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                       // Do Work
                        handler.removeCallbacks(this);
                        Looper.myLooper().quit();
                   }
                }, 2000);

                Looper.loop();
            }
        };
        thread.start();
    }

推荐