博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Handler与线程通信(二)
阅读量:5104 次
发布时间:2019-06-13

本文共 2255 字,大约阅读时间需要 7 分钟。

  回顾上一集内容:

    首先在UI Thread(Main Thread)创建一个Handler对象, 复写其HandlerMessage方法

    在Worker Thread里面调用Handler的SendMessage来发送消息

    消息会被发送到消息队列里面, Looper会从队列中取出并给主线程HandlerMessage处理

    这种机制实现从WorkerThread发送消息给MainThread

 

  这一集:

  

    这个过程与上一篇相反

    由MainThread里面的Handler发送消息, WorkerThread里面的HandlerMessage来处理

 

  总共分为3个步骤:

    1. 准备Looper对象

    2. 在WorkerThread当中生成Handler对象

    3. 在MainThread当中发送消息

1 public static class PlaceholderFragment extends Fragment { 2  3         private Button button; 4         private Handler handler; 5          6         public PlaceholderFragment() { 7         } 8  9         @Override10         public View onCreateView(LayoutInflater inflater, ViewGroup container,11                 Bundle savedInstanceState) {12             View rootView = inflater.inflate(R.layout.fragment_main, container, false);13  14             button = (Button)rootView.findViewById(R.id.buttonId);15             button.setOnClickListener(new OnClickListener() {  //匿名内部类写法!!!!!            16                 public void onClick(View v) {17                     Log.i("tag","onClick--->" + Thread.currentThread().getName());18                     Message msg = handler.obtainMessage();19                     handler.sendMessage(msg);20                 }21             });22                    23             WorkerThread wt = new WorkerThread();24             wt.start();25             26             return rootView;27         }28         29         class WorkerThread extends Thread{30             //固定写法!!!!31             @Override32             public void run() {33                 //准备Looper对象34                 Looper.prepare();35                 //在WorkerThread中生成一个Handler对象36                 handler = new Handler(){37                     public void handleMessage(Message msg) {38                         Log.i("tag","handlerMessage--->" + Thread.currentThread().getName());39                         Log.i("tag","Message Reiceved!!!");40                     }41                 };42                 //调用Looper的loop方法之后,Looper方法将不断从消息队列中取出消息对象,然后调用Handler的HandlerMessage处理该消息对象43                 //如果消息队列没有消息, 则线程阻塞44                 Looper.loop();45             }          46         }47     }

 

 

转载于:https://www.cnblogs.com/iMirror/p/3840224.html

你可能感兴趣的文章
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
java web 中base64传输的坑
查看>>
java 中的线程(一)
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
MySQL更改默认的数据文档存储目录
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>
uboot分析:uboot的启动过程分析
查看>>
tmux的简单快捷键
查看>>