当前位置: 首页 > 知识库问答 >
问题:

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

仰雅昶
2023-03-14

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

handler.post(runnable, delay);

runnable应该在后台线程中运行。有可能创造这样的处理器吗?某个地方有没有“背景”Looper或者我怎么才能创建它?

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

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

我只是想知道汉德勒是否能以“干净”的方式完成。

共有3个答案

万明辉
2023-03-14

您可以使用 Looper.prepare() 和 Looper.loop 在后台线程中设置 Looper

  • http://developer.android.com/reference/android/os/Looper.html
林子石
2023-03-14

你可以试试这样的东西

    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();
    }
温浩大
2023-03-14

您可以简单地这样做:

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);
 类似资料:
  • 问题内容: 我想在后台线程中运行一些Runnable。我想使用Handler,因为它便于延迟。我的意思是 凡 可运行 应当运行 后台 线程。是否可以创建这样的处理程序?是否在某个地方有“背景” Looper,或者该如何创建? PS我知道如何使用自定义类扩展Thread,但是比处理程序方式需要更多的编码工作。因此,请不要发布其他解决方案或类似的内容 如果Handler能以“干净”的方式做到这一点,我

  • 我有一个简单的java程序,它只是一段代码,可以从数据库中读取并根据某些条件修改数据库的内容。现在,我想要的是这个程序应该在启动时自动启动并在后台静默运行,除非有人从任务管理器中杀死它。我以前从未做过这样的事情,也不知道具体该怎么做。有人能帮我解决这个问题吗?谢谢你...

  • 我现在有这个问题,我需要在应用程序在后台时处理消息推送的信息,我的意思是,甚至不点击通知。这意味着这个应用程序:(UIApplication*)应用程序didReceiveRemote teNotify:(NSDicpedia*)userInfo fetchCompletionHandler:(val(^)(UIBackground FetchResult))完成必须在后台调用Handler!这是

  • 问题内容: 我想从主Java程序中产生一个Java线程,并且该线程应单独执行而不会干扰主程序。应该是这样的: 用户启动的主程序 做一些业务工作,应该创建一个可以处理后台进程的新线程 一旦创建线程,主程序就不要等到生成的线程完成。实际上,它应该是无缝的。 问题答案: 一种简单的方法是自己手动生成线程: 另外,如果您需要产生多个线程或需要重复执行,则可以使用更高级别的并发API和执行程序服务:

  • 我正在尝试将我的UIAlertViews更改为UIAlertController。我为它设置了这个操作: 但是,处理程序直到动作被点击大约一秒钟后才运行。有什么方法可以加快速度吗?