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

时间:2014-11-23 10:57:56

标签: java android multithreading android-asynctask looper

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

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

我的场景要求我在后台线程中调用一些操作,并且我想将结果编组回主脚本线程。

我了解AsyncTaskExecutorLooper类的基础知识。其中,Looper似乎是一个很好的候选者,因为它允许设置队列并将消息回发给给定的线程(AsyncTask是"硬连线"在UI线程上运行回调,这不是我的想要在这里。)

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

1 个答案:

答案 0 :(得分:1)

与UI线程进行通信有三种主要方式:

  1. Activity.runOnUiThread(Runnable)

  2. View.post(Runnable)

  3. Handlers

  4. 在您的情况下,我建议您创建一个Handler,因为前两个解决方案暗示您对ActivityView

    有参考

    修改

    如果您想在应用中使用任何主题,只需确保已设置Looper,并使用关联的Handler

    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。更多信息请访问:Handlers, MessageQueue, Looper, do they all run on the UI thread?