Java 如何在Android中将回调发布到任意线程

Java 如何在Android中将回调发布到任意线程,java,android,multithreading,android-asynctask,looper,Java,Android,Multithreading,Android Asynctask,Looper,我正在使用Unity游戏引擎,它也支持导出到Android 该引擎使用多个线程,包括UI线程和一个单独的脚本线程,其中所有用户自定义代码都在执行 我的场景需要在后台线程中调用一些操作,并且我希望将结果封送回主脚本线程 我知道课程的基本知识。其中,Looper似乎是一个很好的选择,因为它允许设置队列并向给定线程发回消息(AsyncTask是“硬连线”的,用于在UI线程上运行回调,这不是我在这里想要的) 实现这一点的正确方法是什么?与UI线程通信的主要方法有三种: 在您的情况下,我建议您创建一

我正在使用Unity游戏引擎,它也支持导出到Android

该引擎使用多个线程,包括UI线程和一个单独的脚本线程,其中所有用户自定义代码都在执行

我的场景需要在后台线程中调用一些操作,并且我希望将结果封送回主脚本线程

我知道课程的基本知识。其中,Looper似乎是一个很好的选择,因为它允许设置队列并向给定线程发回消息(AsyncTask是“硬连线”的,用于在UI线程上运行回调,这不是我在这里想要的)


实现这一点的正确方法是什么?

与UI线程通信的主要方法有三种:

  • 在您的情况下,我建议您创建一个
    处理程序
    ,因为前两个解决方案意味着您对
    活动
    视图有一个参考

    编辑

    如果您想在应用程序中使用任何线程,只需确保已设置
    活套
    ,并使用关联的
    处理程序

    class YourLooperThread extends Thread
    {
        // make it accessible from the outside
        private Handler handler;
    
        @Override public void run()
        {
            Looper.prepare();
    
            // Customize your handler, it has to be used in any thread which want to push a message in this thread's looper message Queue
            handler = new Handler();
    
            Looper.loop();
        }
    }
    

    小心:您想在该线程中执行的所有其他任务都必须通过消息队列完成,即在处理程序中发布一个runnable。此处的更多信息:

    Handler将帮助您在后台线程中调用操作。自定义BroadcastReceiver如何?@DonChakkappan我相信Handler会这样做,正如上面评论中建议的那样。我还没有使用过,但我会检查该类的文档。谢谢。我的问题特别提到,我不想在UI线程上执行,而是在进程中的任意线程上执行。谢谢。是否必须将其放置在自定义线程类中?我遇到的情况是框架已经创建了一个线程。我是否可以添加一个处理程序和一个循环器,并将该处理程序公开给其他要发布到的线程?另外,您认为所有任务都应该通过消息队列完成是什么意思?这个问题将帮助您理解:循环器在循环时会阻塞您的线程,因此此循环器将无法执行任何其他操作。如果这个线程来自一个框架,它可能是一个问题。