14.Android-使用sendMessage线程之间通信
2024-10-08 06:34:48
1.Handler介绍
Handler 是一个消息分发对象。handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,通过它可以实现在不同线程之间传递消息
本章Handler类要用到的方法有:
void handleMessage(Message msg); //需要重写的方法,用来处理接收的消息,只有当接收到发送者发来的消息,才会回调该方法
Message obtainMessage(); //获取一个消息对象
boolean sendMessage(Message msg); //发送消息对象,发送成功的话,就会回调handleMessage()方法
2.MainActivity.java如下所示:
package com.example.tcpdemo; import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu; public class MainActivity extends Activity { MyThread mt; //定义一个handler
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
//打印发送者发来的消息
System.out.println("main what:"+msg.what);
System.out.println("main obj:"+msg.obj.toString());
System.out.println("main arg1:"+msg.arg1); };
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mt = new MyThread();
mt.setHandler(mHandler); //设置handler
mt.start(); //启动线程 }
}
3.MyThread.java如下所示:
package com.example.tcpdemo; import android.os.Handler;
import android.os.Message; public class MyThread extends Thread { public Handler mHandler=null; //获取另一个线程的Handler
public void setHandler( Handler handler){
mHandler = handler;
} public void run(){ try { //让线程睡眠3s。
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} Message msg = mHandler.obtainMessage();
//设置发送的内容
msg.arg1 = ;
msg.what = ;
msg.obj = "this is MyThread";
mHandler.sendMessage(msg);
}
}
运行打印:
最新文章
- TechEmpower 13轮测试中的ASP.NET Core性能测试
- Buddy内存分配算法
- ASP.net MVC 学习笔记(一)-一些不同点
- elipse 从eclipse导入maven项目
- 关于Storyboard的使用
- 欧拉函数 &;【POJ 2478】欧拉筛法
- Linux SUID SGID 讲解
- linux设备驱动层次
- Intellij IDEA13 创建多模块Maven项目
- js 用window.open(参数) 打开新窗口,在新窗口怎么获取传过来的参数
- UVa 11529 (计数) Strange Tax Calculation
- 盘点 OSX 上最佳的 DevOps 工具
- VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
- iOS面试题及答案
- node.js之require
- Find、FindAll、Where的区别
- [Swift]LeetCode114. 二叉树展开为链表 | Flatten Binary Tree to Linked List
- 趋势:flex和grid使布局更简单
- Python校验用户名是否合法示例
- 学习Python第六天