首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工作线程到工作线程通信

工作线程到工作线程通信
EN

Stack Overflow用户
提问于 2018-03-20 19:34:24
回答 1查看 567关注 0票数 3

Java/Android -

我找不到任何工作线程到工作线程通信的例子。这些例子总是涉及到UiThread。

我有一个HandlerThread,它得到工作信息,而HandlerThread将工作扩展到多个工作线程。我希望多个工作线程能够与HandlerThread通信。

我所能做的就是让工作线程通过Handler与UiThread通信。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-20 19:52:35

代码语言:javascript
复制
public class ModelFragment extends Fragment implements Handler.Callback {

   Handler backHandler1, backHandler2, mainHandler;

   @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);

        HandlerThread backThread1 = new HandlerThread("BACK_THREAD_1");
        backThread1.start();
        backHandler1 = new Handler(backThread1.getLooper(), this);

        HandlerThread backThread2 = new HandlerThread("BACK_THREAD_2");
        backThread2.start();
        backHandler2 = new Handler(backThread2.getLooper(), this);

        mainHandler = new Handler(Looper.getMainLooper(), this);
        // sending message from main thread to thread 1
        backHandler1.obtainMessage(BACK1_WHAT, backObj).sendToTarget();
    }

    @Override
    public boolean handleMessage(Message msg) {
        switch(msg.what){
            case BACK1_WHAT:
            // this code runs on thread 1

            // sending message to thread 2 from thread 1
            backHandler2.obtainMessage(BACK2_WHAT, backObj1).sendToTarget();
            return true;

            case BACK2_WHAT:
            // this code runs on thread 2

            // sending message to thread 1 from thread 2
            backHandler1.obtainMessage(BACK1_WHAT, backObj2).sendToTarget();

            // sending message to main thread from thread 2
            mainHandler.obtainMessage(MAIN_WHAT, backObj2).sendToTarget();
            return true;

            case MAIN_WHAT:
            // runs on ui thread
            return true;
        }
        return false;
    }

    @Override
    public void onDestroy() {
       if(null != backHandler1) {
           backHandler1.removeCallbacksAndMessages(null);
           if(null != backHandler1.getLooper())
               backHandler1.getLooper().quit();
       }
       if(null != backHandler2) {
           backHandler2.removeCallbacksAndMessages(null);
           if(null != backHandler2.getLooper())
               backHandler2.getLooper().quit();
       }
       super.onDestroy();
   }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49392743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档