androidHandler概念理解与运用.doc_第1页
androidHandler概念理解与运用.doc_第2页
androidHandler概念理解与运用.doc_第3页
androidHandler概念理解与运用.doc_第4页
androidHandler概念理解与运用.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

android: Handler概念理解与运用 android.os.Handler是Android SDK中处理定时操作的核心类。通过Handler类,可以提交和处理一个Runnable对象。这个对象的run 方法可以立刻执行,也可以在指定时间之后执行(可以称为预约执行)。 handler类允许你发送消息和处理线程消息队列中的消息及runnable对象。handler实例都是与一个线程和该线程的消息队列一起使用,一旦创建了一个新的handler实例,系统就把该实例与一个线程和该线程的消息队列捆绑起来,这将可以发送消息和runnable对象给该消息队列,并在消息队列出口处处理它们。 handler类有两种主要用途: 1、按照时间计划,在未来某时刻,对处理一个消息或执行某个runnable实例。 2、把一个对另外线程对象的操作请求放入消息队列中,从而避免线程间冲突。 时间类消息通过如下方法使用: post(Runnable) postAtTime(Runnable, long) postDelayed(Runnable, long) sendEmptyMessage(int) sendMessage(Message) sendMessageAtTime(Message, long) andsendMessageDelayed(Message, long) methods. post之类函数可以传输一个runnable对象给消息队列,并在到达消息队列后被调用。sendmessage之类函数可以传送一个包含数据的message对象,该message对象可以被Handler类的handleMessage(Message) 方法所处理。 post之类函数和sendmessage之类的函数都可以指定消息的执行时机,是立即执行、稍后一段时间执行,还是在某个确定时刻执行。这可以用来实现超时、消息或其他时间相关的操作。 当一个进程启动时,主线程独立执行一个消息队列,该队列管理着应用顶层的对象(如:activities、broadcast receivers等等)和所有创建的窗口。你可以创建自己的一个线程,并通过handler来与主线程进行通信。这可以通过在新的线程中调用主线程的handler的post和sendmessage操作来实现。 Handler类主要可以使用如下3个方法来设置执行Runnable对象的时间:plain view plaincopyprint?1. /立即执行Runnable对象2. publicfinalbooleanpost(Runnabler);3. /在指定时间uptimeMillis后执行Runnable对象4. publicfinalbooleanpostAtTime(Runnabler,longuptimeMillis);5. /在指定的时间间隔delayMillis执行Runnable对象6. publicfinalbooleanpostDelayed(Runnabler,longdelayMillis); 从上面的三个方法可以看出,第一个参数的类型都是Runnable ,因此,在调用这三个方法之前,需要有一个实现Runnable接口的类,Runnable接口的代码如下:html view plaincopyprint?1. publicinterfaceRunnable2. 3. publicvoicrun();/线程要执行的方法4. 在Runnable接口中只有一个Run 方法,该方法为线程执行方法。plain view plaincopyprint?1. Handlerhandler=newHandler();2. handler.postDelayed(This,5000); 如果想在5秒内停止记时可以用如下代码: html view plaincopyprint?1. handler.removeCallbacks(this); 除此之外还可以用postAtTime方法指定未来的某一个精确时间来执行Runnable对象,代码如下:html view plaincopyprint?1. Handlerhandler=newHandler();2. handler.postAtTime(newRunToast(this),android.os.SystemClock.uptimeMillis()+15*1000);/在15秒后执行Runnable对象 其中RunToast是一个实现Runnable的接口的类,代码如下:html view plaincopyprint?1. classRunToastimplementsRunnable2. 3. privateContextcontext;4. publicRunaToast(Contextcontext)5. 6. this.context;7. 8. Override9. publicvoidrun()10. 11. Toast.makeText(context,15秒后显示Toast提示信息,Toast.LENGTH_LONG).show();12. 13. postAtTime的第二个参数表示一个精确的时间的毫秒数,如果从当前时间算起,需要使用android.os.SystemClock.uptimeMillis()获得基准时间。 要注意的是,不管使用哪个方法来执行Runnable对,都只能运行一次。如果想循环执行,必须在执行完后再次调用post、postAtTime或postDelayed方法。例如,在Run方法中再次调用postDelayed方法,代码如下:html view plaincopyprint?1. publicvoidrun()2. 3. tvCount.setText(Count:+String.valueOf(+count);4. /现次调用postDelayed方法,5秒后run方法仍被调用,然后再一次同用postDelayed方法,这样就行成了循环调用5. handler.postDelayed(this,5000);6. 下面是一个运用实例:完整代码如下:csf.javaplain view plaincopyprint?1. packagecsf.handler;2. 3. importandroid.app.Activity;4. importandroid.content.Context;5. importandroid.os.Bundle;6. importandroid.os.Handler;7. importandroid.view.View;8. importandroid.view.View.OnClickListener;9. importandroid.widget.Button;10. importandroid.widget.TextView;11. importandroid.widget.Toast;12. 13. publicclasscsfextendsActivityimplementsOnClickListener,Runnable14. 15. privateHandlerhandler;16. privateTextViewtvCount;17. privateintcount=0;18. 19. classRunToastimplementsRunnable20. 21. privateContextcontext;22. 23. publicRunToast(Contextcontext)24. 25. this.context=context;26. 27. Override28. publicvoidrun()29. 30. Toast.makeText(context,15秒后显示Toast提示信息,Toast.LENGTH_LONG)31. .show();32. 33. 34. Override35. publicvoidonClick(Viewview)36. 37. switch(view.getId()38. 39. caseR.id.btnStart:40. handler.postDelayed(this,5000);41. break;42. caseR.id.btnStop:43. handler.removeCallbacks(this);44. break;45. caseR.id.btnShowToast:46. handler.postAtTime(newRunToast(this)47. 48. ,android.os.SystemClock.uptimeMillis()+15*1000);49. break;50. 51. 52. Override53. publicvoidrun()54. 55. tvCount.setText(Count:+String.valueOf(+count);56. handler.postDelayed(this,5000);57. 58. Override59. publicvoidonCreate(BundlesavedInstanceState)60. 61. super.onCreate(savedInstanceState);62. setContentView(R.layout.main);63. ButtonbtnStart=(Button)findViewById(R.id.btnStart);64. ButtonbtnStop=(Button)findViewById(R.id.btnStop);65. ButtonbtnShowToast=(Button)findViewById(R.id.btnShowToast);66. tvCount=(TextView)findViewById(R.id.tvCount);67. btnStart.setOnClickListener(this);68. btnStop.setOnClickListener(t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论