android通过Handler在线程之间传递消息
来源:互联网 发布:腾牛网怎么下载软件 编辑:程序博客网 时间:2024/06/10 06:24
这个demo介绍了通过Handler在线程之间传递消息,demo中一个三个线程,主线程,发送消息的分线程,接收消息的分线程。发送消息的分线程会通知主线程更改标签文字,同时会通知接收消息的分线程更改进度条的进度。
demo:下载地址。
运行截图:
源码:
package fk.androiddemo_005;//工作线程不能直接修改主线程的控件,只能通过handler传递信息//对于以上,progressBar控件除外//通过handler-looper可以实现在各个线程之间传递信息import android.os.Handler;import android.os.Looper;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ Button but; TextView text; ProgressBar proBar; MyHandler handler;//定义handler Handler handler2; Message msg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); but=(Button)findViewById(R.id.but); but.setOnClickListener(this); text=(TextView)findViewById(R.id.text); proBar=(ProgressBar)findViewById(R.id.proBar); handler=new MyHandler();//在主线程中实现handler,就会在主线程中用Looper处理其msg new MyAcceptThread().start();//开启接收信息线程(先开,因为handler2是在这个线程里实现的) } @Override public void onClick(View v) { new MySendThread().start();//开启发送信息线程 } // 发送信息的线程类 class MySendThread extends Thread{ public void run(){ int i=0; while(i!=10){ Bundle bundle=new Bundle(); bundle.putString("num","第"+i+"次");//bundle中也可以放序列化或包裹化的类对象数据 msg=handler.obtainMessage();//每发送一次都要重新获取 msg.setData(bundle); handler.sendMessage(msg);//用handler向主线程发送信息 msg=handler2.obtainMessage(); msg.what=i; handler2.sendMessage(msg);//用handler2向myAcceptThread线程发送信息 //休眠3秒,需要异常处理 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } i++; } } } //接收信息的线程类 class MyAcceptThread extends Thread{ public void run(){ Looper.prepare();//准备Looper对象 //在分线程中实现handler2,就会在分线程中处理其msg handler2=new Handler(){//这是用匿名内部类生成一个handler对象 public void handleMessage(Message msg) { proBar.setProgress(msg.what); } }; //调用Looper的loop方法后,Looper对象将不断从消息队列中取出消息对象并交给handleMessage处理 //没有消息时该线程会阻塞 Looper.loop(); } } //自定义handler类 class MyHandler extends Handler{ @Override //接收别的线程的信息并处理 public void handleMessage(Message msg) { Bundle bundle=msg.getData(); text.setText(bundle.get("num").toString()); } }}
0 0
- android通过Handler在线程之间传递消息
- android通过Handler在线程之间传递消息
- Android 利用handler在线程之间传递代码
- Handler ,android消息传递,android 线程通信
- 使用Handler在线程之间传递消息所遇到的问题及解决方法
- 在win32线程之间传递消息
- Android:使用Handler在线程之间通信
- android线程消息传递机制——Looper,Handler,Message
- android线程消息传递机制——Looper,Handler,Message
- 线程之间消息的传递
- Android Handler消息传递机制
- Android Handler消息传递机制
- android Handler 消息传递机制
- Android Handler消息传递机制
- android Handler 消息传递机制
- Android:Handler消息传递机制
- Android Handler消息传递机制
- android消息传递机制---handler
- hibernate annotation 双向 one-to-one 注解
- HDU-1297 Children’s Queue(递推)(高精度)
- linux 中shell编程中的test用法
- 提升电路板电磁兼容性的PCB设计技巧
- Es Query Related
- android通过Handler在线程之间传递消息
- 欢迎使用CSDN-markdown编辑器
- 11-Threads
- Android——ScrollView嵌套ListView/GridView的问题
- 12-Thread Control
- [.Net码农]如何在ASP.NET的web.config配置文件中添加MIME类型
- Redis快速入门
- 解决Qt程序在Linux下无法输入中文的办法
- Java面向对象基础课之三/0909号