Hnadler的基本使用
来源:互联网 发布:社交网络 网盘 编辑:程序博客网 时间:2024/06/01 10:32
一、Handler的用处
handler用来发送和处理消息或者Runnable对象,且这些数据通常与其相应的Message Queue相关联,主要有两个方面的应用:(1)周期性的在未来的某个时段执行(2)将Runnable放入一个不同于本线程的线程进行执行
另外注意的是当创建一个默认的Handler时,它会自动与它所在的线程的MessageQueue关联,MessageQueue是Handler所必须需要的
二、主要的使用方法;
(1)Post()系列来执行Runnable对象承载的任务
(2)SendMessage()系列方法来发送一个Message对象来进行相应的操作任务
(3)remove()系列方法来取消队列中的任务
三、相关的类:
(1)Looper:用于为线程执行消息循环,默认的线程没有该类,通过static 方法Prepare()和Loop()来创建和初始化一个Looper,然后可以通过myLooper()来获取与当前线程绑定的Looper, handler的所有消息都会发往Looper,然后在从Looper中去除消息进行执行
(2)CallBack接口;如果使用该接口来初始化Handler,所有消息都会先经过这里的handleMessage,可以在这里进行预处理,然偶再由handler处理
(3)HandlerThread:是一个实用类,创建一个线程且带有一个Looper,可以使用这个Looper来创建handler
四:代码如下:
//在自定义的类中使用handlerclass Handelr_02 extends Thread{ Handler handler; @Override public void run() { Looper.prepare(); handler=new Handler(){//handler须在looper之前创建,且Handler会自动绑定looper @Override public void handleMessage(Message msg) { Log.i("tagsome","number:="+msg.arg1); } }; Looper.loop(); }}public class MainActivity extends ActionBarActivity { Handler handler_01=new Handler(){ @Override public void handleMessage(Message msg) { button.setTextSize(msg.arg1); Log.i("tagsome","msg arg1="+msg.arg1); } }; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.normal_use_01); } public void onHnadlerTest(View view){ switch (view.getId()){ case R.id.normal_use_01: Message msg01=new Message(); msg01.arg1=10; handler_01.sendMessage(msg01);break; case R.id.normal_use_02: //从公共的消息池中获取消息实例,若没有则会创建一个消息,比使用new要高效 Message msg02=handler_01.obtainMessage(1,40,40); // handler_01.sendMessage(msg02); msg02.sendToTarget();//与上面的意思相同 break; case R.id.normal_use_03: Message msg03=new Message(); msg03.arg1=999; Handelr_02 htest=new Handelr_02(); htest.start(); try { Thread.sleep(500);//防止并发冲突,以免handler的错误引用 } catch (InterruptedException e) { e.printStackTrace(); } htest.handler.sendMessage(msg03); break; case R.id.normal_use_04: HandlerThread handlerThread=new HandlerThread("myhandlerThread"); handlerThread.start();//需要先启动线程 Looper looper=handlerThread.getLooper(); Handler handler04=new Handler(looper){ @Override public void handleMessage(Message msg) { Log.i("tagsome","uesing handler thread's looper"); } }; handler04.sendEmptyMessage(0); break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
0 0
- Hnadler的基本使用
- Android的进程Hnadler与AsyncTask
- Hnadler机制
- android 之 Hnadler 、Message 、Looper
- Android 学习笔记 10 Hnadler
- Ant 的基本使用
- Ant 的基本使用
- Eclipse的基本使用
- Eclipse的基本使用
- JBuilder的基本使用
- JavaDB的基本使用
- Eclipse的基本使用
- Eclipse的基本使用
- JTable的基本使用
- cscope的基本使用
- gdb的基本使用
- DWR的基本使用
- svn的基本使用
- Activiti部署流程报错
- 如何建立落地型数据分析(挖掘)流程
- showDialog()、onPrepareDialog()和onCreateDialog()的关系 .
- #leetcode#Course Schedule II
- Go图片上传
- Hnadler的基本使用
- Linux下串口编程入门
- Struts2非常简单实用的身份验证功能
- tomcat,Jboss,weblogic区别,容器的作用 .
- Android 4.4 keyguard类图
- 字符串分割
- QT学习记录(1)环境配置和初步建立项目运行
- 封装
- 决策树之ID3、C4.5、C5.0算法