青春须早为,岂能长少年。这篇文章主要讲述2017.12.18 Android开发之消息队列(实现子线程修改UI组件)相关的知识,希望能为你提供帮助。
1.界面布局,以及组件初始化:
文章图片
组件初始化:
private Button button; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button); button.setOnClickListener(new ButtonListener()); handler=new FirstHandler(); }
2.消息队列的使用:
class ButtonListener implements View.OnClickListener{//设置监听器,使得每点一次按钮生成一次消息 @Override public void onClick(View view) { Message msg=handler.obtainMessage(); msg.what=8; //msg的其中一个参数,可以设置很多msg的参数 handler.sendMessage(msg); //把消息扔出去 } }class FirstHandler extends Handler{ @Override public void handleMessage(Message msg) {//处理消息,传一个消息体进来,理解为一个对象,可以是字符串,int型之类的 int what=msg.what; System.out.println("数据what是:"+what); super.handleMessage(msg); } }
3.通过消息队列来修改主线程的文字:
class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { System.out.println("这是来自MyHandler的信息:"+Thread.currentThread().getName()); String s=(String)msg.obj; textview.setText(s); super.handleMessage(msg); } } class ButtonListener implements View.OnClickListener{ @Override public void onClick(View view) { Thread thread=new NetWorkThread(); thread.start(); } }class NetWorkThread extends Thread{ @Override public void run() { System.out.println("来自NetWorkThread的信息:"+Thread.currentThread().getName()); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } String s="有理想的爱国青年"; Message msg=handler.obtainMessage(); msg.obj=s; handler.sendMessage(msg); super.run(); } }
【2017.12.18 Android开发之消息队列(实现子线程修改UI组件)】
文章图片
推荐阅读
- Android注解方式实现表单校验
- Android ContentProvider数据共享
- 2017.12.18 Android开发之进程讲解
- Xamarin.android Activity动画切换效果实现
- Android异步消息机制
- 通用Mapper新特性(ExampleBuilder 2017年12月18日)
- Android 跨进程启动Activity黑屏(白屏)的三种解决方案
- Android HandlerThread 源码分析
- Android系统常用URI