安卓学习——消息机制与异步任务
来源:互联网 发布:潍坊四中的网络签章 编辑:程序博客网 时间:2024/05/16 14:03
安卓消息机制与异步任务
在学习安卓消息机制与异步任务之前,我们要先明白几个点:
- 在Android中,只有在UIThread中才能直接更新界面
- 在Android中,长时间的工作(联网)都需要在分线程中执行
- 在分线程获得服务器数据后, 需要立即到主线程去更新界面显示数据
那么我们该如何实现线程之间的通信呢?这里给大家列举两种方法:消息机制与异步处理:
消息机制:
在讲消息机制之前,先讲两个会用到的API:
Message:消息
- 可理解为线程间通讯的数据单元, 它可以在内部携带少量的信息,用于再不同线程之间交换数据。除了what字段,还可以用arge1和arg2字段来携带一些整型数据,使用obj字段携带一个Object对象。
- 创建对象: Message.obtain(what)
- 封装数据
public int what //id 标识
public int arg1
public int arg2
public Object obj
Handler : 处理器
- Handler是Message的处理器,同时也负责消息的发送和移除的工作
- 发送即时消息: sendMessage(Message msg)
- 发送延时消息: sendMessageDelayed(Message msg, long time)
- 处理消息: handleMessage(Message msg) (回调方法)
- 移除还未处理的消息: removeMessages(int what)
在了解了这两个API之后,便是使用Handler的步骤了:
- 创建Handler成员变量对象, 并重写其handleMessage()
- 在分/主线程创建Message对象
- 使用handler对象发送Message
- 在handleMessage()中处理消息
异步任务:
什么是异步任务?
- 逻辑上: 以多线程的方式完成的功能需求
- API上: 指AsyncTask类
对AsyncTask的理解
- 在没有AsyncTask之前, 我们用Handler+Thread就可以实现异步任务的功能需求
- AsyncTask是对Handler和Thread的封装, 使用它更编码更简洁,更高效
- AsyncTask封装了ThreadPool, 比直接使用Thread效率要高
与异步任务相关的API:
- AsyncTask: 简化Handler处理多线程通信的问题
AsyncTask<Params, Progress, Result>
- Params 启动任务执行的输入参数,比如HTTP请求的URL。
- Progress 后台任务执行的百分比。
- Result 后台执行任务最终返回的结果,比如String。
- execute(Params… params) 启动任务, 开始任务的执行流程
- void onPreExecute() 在分线程工作开始之前在UIThread中执行,一般用来显示提示视图
- Result doInBackground(Params… params) 在workerThread中执行, 完成任务的主要工作,通常需要较长的时间
- void onPostExecute(Result result) 在doInBackground()执行完后在UIThread中执行,一般用来更新界面
- publishProgress(Progress… values) 在分线程中, 发布当前进度
- void onProgressUpdate(Progress… values) 在主线程中更新进度
在使用AsyncTask时需要遵循五大原则
- AsyncTask 类必须在UI线程中被加载,在JELLY_BEAN版本后将会自动完成。
- AsyncTask的实例化必须在UI线程中完成。
- AsyncTask的execute(Params…)方法必须在UI线程中被调用。
- 不需要手动调用 这些方法:onPreExecute(), onPostExecute(Result), doInBackground(Params…), onProgressUpdate(Progress…) 。
- 一个AsyncTask实例只能被执行一次(第二次执行将会抛出异常)。
以上便是安卓消息机制与异步任务,希望对大家有所帮助,本人为初学者,文笔有限,有错漏欢迎提出,谢谢!
阅读全文
0 0
- 安卓学习——消息机制与异步任务
- 消息机制与异步任务
- android学习之消息机制与异步任务
- 安卓学习笔记——多线程和异步消息处理机制
- 安卓UI线程与异步消息处理机制
- Android之消息机制与异步任务
- Android中的消息机制与异步任务
- Android核心技术之(5)---消息机制与异步任务
- 安卓开发:Handler异步消息处理机制使用
- 安卓开发:AsyncTask异步消息处理机制使用
- 安卓开发之异步消息处理机制
- 安卓消息机制
- 异步消息与AsyncTask机制
- 安卓 异步任务 ----AsyncTask
- 【安卓】AsyncTask异步任务
- 安卓开发之多线程与异步任务
- Android异步任务机制—AsyncTask
- Android异步任务机制—Handler
- Matrix-Tree定理(2)----矩阵树定理
- SQL SERVER大话存储结构(1)
- 滑动最小值(双端队列)
- Wpa_supplicant.conf用法小结
- ssh整合项目启动报错
- 安卓学习——消息机制与异步任务
- for循环和它的while循环形式的区别
- py-faster-rcnn训练自己数据集需要修改的参数
- STM32中ADC模拟信号转数字信号
- H5零碎知识点整理
- C语言声明解读步骤
- iOS 创建对象的姿势
- (个人)AR电子书系统创新实训第五周(1)
- 错误:unrecognized command line option “-std=c++11”,解决ubuntu不支持c++11的问题