- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程及消息处理 on android 本章内容 Android多线程概述 创建线程 操作线程 UI线程与非UI线程 多线程中的常用类 Handler类 AsyncTask类 Timer定时器 Android多线程通信机制 多线程概述 创建线程 通过继承Thread类来创建线程 多线程概述 创建线程 通过实现Runnable接口来创建线程 UI线程与非UI线程 UI线程 当应用启动,系统会创建一个主线程(UI线程) 处理与UI相关的事件 如按键事件、用户接触屏幕的事件、屏幕绘图事件等 系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去 从UI线程中操作UI组件是安全的 非UI线程中进行UI操作不是线程安全的 UI线程与非UI线程 非UI线程 非主线程 向UI线程发出请求消息,由UI线程处理这些消息,并进行相关的UI操作 UI线程与非UI线程 非UI线程UI操作错误 UI线程与非UI线程 非UI线程UI操作错误 多线程中的常用类 Handler类 处理较为复杂的线程间通信及消息处理 AsyncTask类 轻量级基于多线程的进行后台异步工作处理的类 Timer定时器 定时器也是常用的实现多线程程序的方式 多线程中的常用类 Handler类 非UI线程向UI线程发出请求消息,由UI线程处理这些消息,并进行相关的UI操作。这个发送消息和处理消息的过程由Handler类来协助进行处理 在UI线程中创建Handler类的子类,并通过重写handleMessage(Message msg)方法来实现UI操作 当有其他线程向这个自定义子类的对象发送消息时,handleMessage()方法会被调用,通过识别参数msg的值 boolean sendMessage(Message msg) boolean sendEmptyMessage(int what) 多线程中的常用类 Handler类 Message类用来封装所发送消息的值,可以通过Bundle类来封装这些不同类型的值 void setData(Bundle data) Bundle getData() 两个int类型的域变量 一个Object类型的域变量作为额外的存储空间 Bundle类用于提供从字符串到某个具体值的映射,一个Bundle对象可以封装多个键值对 void putXXX(String key, XX value) XXX getXXX(String key) 多线程中的常用类 Handler类 实现过程 多线程中的常用类 多线程中的常用类 Handler类 实例:使用多线程模拟秒表应用 多线程中的常用类 AsyncTask类 轻量级的基于多线程的进行后台异步工作处理的类 实现后台向UI线程传递简单数据 使用AsyncTask类的方法是创建一个子类,重写其相关的方法,然后在UI线程中使用execute()方法运行这个自定义类即可 多线程中的常用类 AsyncTask类重写方法 onPreExecute():当后台任务使用execute()方法运行后,会立即由UI线程调用,一般用于初始化操作和在界面上显示后台任务的初始状态。 doInBackground(Params...):当onPreExecute()方法调用结束后,由后台线程调用该方法,开始执行后台任务。在后台任务执行过程中,可以调用publishProgress(Progress...)方法向UI线程发布当前后台任务执行的状态,以便程序界面进行相应的更新。 onProgressUpdate(Progress...):当后台线程调用publishProgress(Progress...)方法后,由UI线程调用该方法进行UI操作。 onPostExecute(Result):当后台任务全部执行完毕后,由UI线程调用该方法,更新界面的显示,或进行其他的后续操作。 多线程中的常用类 AsyncTask类 实例:使用AsyncTask类模拟进度变化 多线程中的常用类 Timer定时器 使用Timer类和TimerTask类可实现定时器的功能。但是在定时器中也不能直接进行UI操作,需要使用以下几种方式之一来间接地进行UI操作 通过Handler类处理 通过Activity.runOnUiThread(Runnable)方法 通过View.post(Runnable)方法 多线程中的常用类 Activity.runOnUiThread(Runnable action) 该方法被调用后,如果当前线程是UI线程,则立即启动由参数action所指定的线程 如果该方法被调用时的当前线程不是UI线程,则由参数act
您可能关注的文档
最近下载
- 《校园危机事件应对与处理》专题讲座.pptx VIP
- 一次性使用中心静脉导管套装产品技术要求标准2024年.docx VIP
- 《工程伦理》课程教学大纲.docx VIP
- GB50217-2018 电力工程电缆设计标准.docx VIP
- (高清版)-B-T 17799.2-2023 电磁兼容 通用标准 第2部分:工业环境中的抗扰度标准.pdf VIP
- 2025山西航空产业集团有限公司校园招聘86人(第二批)笔试参考题库附答案解析.docx VIP
- 屋顶光伏发电项目施工方案.doc
- 四川省2024年普通高校对口招生统一考试语文真题(含答案解析).docx VIP
- 企业发展五年规划目录.PDF VIP
- 2025年电信人工智能学习考试题库(含答案).pdf VIP
文档评论(0)