线程通信
来源:互联网 发布:淘宝手机页面设为首页 编辑:程序博客网 时间:2024/05/17 22:32
Handler
主要接受子线程发送的数据, 并用此数据配合主线程更新UI。
1个Looper,1个MessageQueue,绑定一个Looper的多个Handler
实例化Handler
当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
final Handler handler = new Handler(getMainLooper()) { @Override public void handleMessage(Message msg) { // 处理消息 } };
子线程中引用Handler
Handler有两个作用:
(1) 分发Message对象和Runnalbe 对象 到主线程
(2) 让一个动作,在不同的线程中执行。
//Handler中分发消息的一些方法// post(Runnable) -----------立即执行// postAtTime(Runnable,long) -----------在某一时刻执行// postDelayed(Runnable,long) ----------推迟执行// sendEmptyMessage(int) // sendMessage(Message); // sendMessageAtTime(Message,long) // sendMessageDelayed(Message,long)
Looper子线程写法
1. 升级子线程为Looper子线程 Looper.prepare();2. 开始循环处理消息队列,loop之后的代码不会执行 Looper.loop();
Meassge 消息类
int arg1,arg2 用来存放整型数据Object obj 用来存放发送给接收器的Object类型的任意对象Message replayTo 用来指定此Message发送到何处的可选Message对象int what 用于指定用户的自定义的消息代码,这样接受者可以了解这个信息//不要使用构造方法,会造成内存消耗过大 Message msg = new Message();//从Handler取一个用完的Message Message msg = handler.obtainMessage();
线程池
有效管理多个子线程,不重复new Thread,防止OOM
//AsyncTask 1. 实例化AsyncTask对象 MyAsyncTask asyncTask = new MyAsyncTask(); 2. 调用顺序 protected void onPreExecute() //开始执行后台任务之前的准备 protected List<String> doInBackground(String... params)------> publishProgress(i)之后,porogressUpdate方法就被激活 protected void onProgressUpdate(Integer... values) protected void onPostExecute(List<String> list) //任务完成之后,返回结果的方法 protected void onCancelled() //手动取消任务的时候 3. 开始执行请求 asyncTask.execute("a", "b", "c", "d", "e", "f", "g");
阅读全文
0 0
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 深度剖析OpenGL ES中的多线程和多窗口渲染技术
- 网络笔记
- 10月9日云栖精选夜读:上千家企业将空降云栖小镇,一起见证普惠科技的魅力
- echarts 调整图表大小的方法
- 热更新之生成文件md5
- 线程通信
- TP5 where多条件查询
- Elastic Search快速上手(2):将数据存入ES
- bzoj4145 [AMPPZ2014]The Prices (状压DP)
- 鼠标经过显示下拉选择下拉
- Java调用C++动态库具体实现
- Elastic Search快速上手(3):搜索
- CSS、HTMl使用position: fixed;实现div的高度填满剩余空间
- c和c++总结