Handler 机制学习之基本用法
来源:互联网 发布:网络共享文件夹打不开 编辑:程序博客网 时间:2024/06/07 10:13
1.Handler的概念
(2)更新UI
(3)线程间通信
主要是接受子线程发送的数据,并用此数据配合主线程更新UI。
一个Handler允许你来发送和处理与其绑定的线程的消息队列中的Message和Runnable对象。
一个Handler允许你来发送和处理与其绑定的线程的消息队列中的Message和Runnable对象。
(1)执行计划任务,主要是一些定时操作。
(2)线程间通信,主要是子线程发送数据,主线程用来跟新UI。
2.实例
(1)定时操作
主要是使用Handler的Delayed,比如sendMessageDelayed,postDelayed来进行定时操作。
public class MainActivity extends Activity implements OnClickListener{ private Button start = null; private Button stop = null; Handler myHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start = (Button)findViewById(R.id.start); stop = (Button)findViewById(R.id.stop); start.setOnClickListener(this); stop.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.start: //调用Handler的post方法,将要执行的线程对象添加到线程队列中 myHandler.post(threadRunnable); break; case R.id.stop: myHandler.removeCallbacks(threadRunnable); break; } } Runnable threadRunnable = new Runnable() { //将要执行的操作写入run方法中。 @Override public void run() { // TODO Auto-generated method stub System.out.println("run"); //在run方法内部,执行postXX的方法,每隔1秒会执行一次 (定时操作) myHandler.postDelayed(threadRunnable, 1000); } };}
(2)更新UI
其实还不是很明白为什么要使用post来把一个Runnable对象加入到消息队列进行处理,也没有开启新的线程,这样做的目的是什么?
public class MainActivity extends Activity implements OnClickListener{ private Button start = null; private Button stop = null; private ProgressBar bar = null; Handler myHandler = new Handler(){ public void handleMessage(Message msg){ bar.setProgress(msg.arg1); myHandler.post(threadRunnable); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start = (Button)findViewById(R.id.start); stop = (Button)findViewById(R.id.stop); bar = (ProgressBar)findViewById(R.id.bar); start.setOnClickListener(this); stop.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.start: //调用Handler的post方法,将要执行的线程对象添加到消息队列中,不会开启一个新的线程,只是执行run方法。 myHandler.post(threadRunnable); break; case R.id.stop: myHandler.removeCallbacks(threadRunnable); break; } } Runnable threadRunnable = new Runnable() { //将要执行的操作写入run方法中。 int i = 0; @Override public void run() { // TODO Auto-generated method stub i = i+10; //得到一个消息对象,Message类是由android操作系统提供, //obtainMessage方法用来得到Message对象 Message msg = myHandler.obtainMessage(); msg.arg1 = i; try { //当前线程睡眠1S Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //发送一个消息,用sendMessage将msg加入到消息队列中 myHandler.sendMessage(msg); if(i>100){ //将线程对象 从handler当中移除 myHandler.removeCallbacks(threadRunnable); } } };}
其实主要的用途也是更新UI,比如在子线程中执行一个耗时操作,然后把结果返回给主线程等。
public class MainActivity extends Activity implements OnClickListener{ private Handler myHandler = null; private Button handlerBtn = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handlerBtn = (Button) findViewById(R.id.btn_handler); handlerBtn.setOnClickListener(this); myHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); System.out.println("zmq Handler in main Thread"); } }; } @Override public void onClick(View v) { // TODO Auto-generated method stub if(v.getId()==R.id.btn_handler){// myHandler.sendEmptyMessage(111); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub myHandler.sendEmptyMessage(222); } }).start(); } }}
0 0
- Handler 机制学习之基本用法
- android-Handler基本用法学习总结
- Android学习之Handler通信机制
- Handler 机制学习之相关类
- Android基础之Handler机制学习
- 记android学习之路----Handler机制
- Handler机制用法概述
- Handler的基本用法
- Handler基本用法
- Handler的学习之路--Handler的用法(1)
- android学习之路 Handler用法
- Android 之 Handler 机制(用法、错误、原理等等)
- Handler机制学习小结
- Handler机制学习整理
- android handler机制学习
- Android之handler机制
- Android之Handler机制
- 2016之handler机制
- 关于Viewpager设置setOffscreenPageLimit引起的效果和问题
- 初探kali Linux
- 百度面试题 0-1背包问题-动态规划法
- IOS--Swift 01
- sql存储过程
- Handler 机制学习之基本用法
- 为html表格添加双击事件,并获取<td>节点的值
- java中Map,List与Set的区别(一)
- LeetCode之Best Time to Buy and Sell Stock II
- sql实现从两个表获取字段组成表数据再插入到函数表中
- x5studio的常用操作
- Git简单介绍(一)
- 科研日报 20150831 FFT ETHERNET
- leetcode 238: Product of Array Except Self