Handler、Looper、MessageQueue(二)
来源:互联网 发布:java textfile类 编辑:程序博客网 时间:2024/05/23 01:12
Main Thread和Worker Thread间的通信
(这里涉及到的是 Worker Thread—>Main Thread)
依靠的是 Handler MessageQueue Looper的信息处理/传递 机制
在Worker Thread中进行耗费时间容易造成阻塞的操作
这里是指联网获得信息 通过Handler将信息发送给MessageQueue
Looper将信息从MessageQueue中取下 交给Handler
Handler调用handleMessage(Message msg)对信息进行处理
这里 handleMessage(Message msg)是在主线程中调用的
这样 就实现了从 Worker Thread中发送信息 到Main Thread中获得信息的过程 实现了Worker Thread—>Main Thread 的单向通信
我们可以将在Worker Thread中计算/获得的数据 通过赋值给信息对象的属性
从而达到数据传递 的目的
以下是具体的 代码操作:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:text="data" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textViewId" android:gravity="center"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/buttonId" android:layout_below="@id/textViewId" android:text="发送信息"/></RelativeLayout>
public class MainActivity extends Activity { private Button button; private TextView textView; private NetWorkHandler netWorkHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.buttonId); textView = (TextView)findViewById(R.id.textViewId); ButtonListener buttonListener = new ButtonListener(); netWorkHandler = new NetWorkHandler(); button.setOnClickListener(buttonListener); } class ButtonListener implements View.OnClickListener{ @Override public void onClick(View v) { NetWorkThread netWorkThread = new NetWorkThread(); netWorkThread.start(); } } class NetWorkThread extends Thread{ @Override public void run(){ //输出语句 用来证明当前执行线程为Worker Thread System.out.println("NetWorkThread --->" + Thread.currentThread().getName()); //模拟访问网络 所以当线程启动时 休眠两秒钟 try { Thread.sleep(2*1000); } catch (InterruptedException e) { e.printStackTrace(); } //变量s的值 模拟从网络当中获取的数据 String s = "从网络当中获取的数据"; // text.setText(String s)这种做法是错误的 因为在Worker Thread不能操作ui Message msg = netWorkHandler.obtainMessage(); //将获得的信息赋值给msg的属性 通过在Main Thread中获得msg 从而获得需要的信息 msg.obj = s; netWorkHandler.sendMessage(msg); } } class NetWorkHandler extends Handler{ @Override public void handleMessage(Message msg) { //输出语句 用来证明当前执行线程为Main Thread System.out.println("NetWorkHandler --->" + Thread.currentThread().getName()); //得到从Worker Thread中传出的Message msg对象 //同时通过调用msg的属性 来获得需要的信息 String s = (String)msg.obj; textView.setText(s); } }
0 0
- Handler、Looper、MessageQueue(二)
- 理解Handler、Looper、MessageQueue、Thread关系?二
- Handler Looper MessageQueue之MessageQueue
- Looper,Handler,Message,MessageQueue
- Message,MessageQueue,Looper,Handler
- Handler,Looper,MessageQueue机制
- Handler,Looper,MessageQueue关系
- Android Handler Looper MessageQueue
- AsyncTask,Handler,Looper,MessageQueue
- Message,Handler,Looper,MessageQueue
- Android Handler+Looper+MessageQueue
- Handler MessageQueue Looper
- handler looper和messageQueue
- Handler,Looper,MessageQueue
- Handler,MessageQueue,Looper解析
- looper、handler、messagequeue 总结
- Handler MessageQueue Looper
- Handler、Looper、MessageQueue(一)
- Linux时间函数之gettimeofday()函数之使用方法
- STL----vector的内存分配与释放
- 关于Android中的四大组件(Activity)
- NYOJ 733 万圣节派对
- linux线程分离状态
- Handler、Looper、MessageQueue(二)
- addEntityUsage
- 除了外教,现在连手机也可以知道你的口语是否标准了
- 监听器和拦截器原理
- 在Spark中实现map-side join和reduce-side join
- 【Qt OpenGL教程】18:二次几何体
- 30天了解30种技术系列---(6)非常赞的UI框架Flat-ui
- linux一句话问答
- RANSAC算法原理+源码