异步加载
来源:互联网 发布:win8硬盘安装linux系统 编辑:程序博客网 时间:2024/05/18 02:21
- AsyncTask
AsyncTask简介 AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦。阅读 AsyncTask的源码可知,AsyncTask是使用java.util.concurrent 框架来管理线程以及任务的执行的,concurrent框架是一个非常 成熟,高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。 AsyncTask是抽象类,其结构图如下图所示:
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Result 后台执行任务最终返回的结果,比如String。
子类必须实现抽象方法doInBackground(Params… p) ,在此方法中实现任务的执行工作,比如连接网络获取数据等。
通常还应 该实现onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。需要注意的是AsyncTask一定要在主线程中创 建实例。
AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的 就是实现这些方法。在任务的执行过程中,这些方法被自动调用,运行过程,如下图所示:
onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。
在执行过程中可以调用 publicProgress(Progress…)来更新任务的进度。
onProgressUpdate(Progress…) 此方法在主线程执行,用于显示任务执行的进度。
onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回
//主线程中调用异步new MyAsyncTask(textview).execute(params);//取消异步操作//需要与activity生命周期一致则写入onPause()if (asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING) { asyncTask.cancel(true);//cancel只是标记状态,并不是真正取消要在异步中判断状态}//异步类class MyAsyncTask extends AsyncTask<String, Void, String> {//params progress result TextView tv; public MyAsyncTask(TextView textview) { tv = textview; } @Override protected String doInBackground(String... params) { if (isCancelled()) {//判断线程状态,可中断耗时操作 } return params[0]; } @Override protected void onPostExecute(String s) { if (isCancelled()) {//判断线程状态,可中断耗时操作 } if (tv != null) { tv.setText(s); } }}
2.采用Thread + Handler + Message
handler简介 Handler为Android提供了一种异步消息处理机制,它包含两个队列,一个是线程列队,另一个是消息列队。使用post方法将线 程对象添加到线程队列中,使用
继而回调Handler中public void handleMessage(Message msg)方法。因此 在创建Handler时应该使用匿名内部类重写该方法。
如果想要这个流程一直执行的话,可以再run方法内部执行postDelay或者 post方法,再将该线程对象添加到消息队列中重复执行。
想要停止线程,调用Handler对象的removeCallbacks(Runnable r)从 线程队列中移除线程对象,使线程停止执行。
3.采用Thread + Handler + post方法
使用post方法将Runnable对象放到Handler的线程队列中,该Runnable的执行其实并未单独开启线程,而是仍然在当前Activity的UI线程中执行,Handler只是调用了Runnable对象的run方法。
0 0
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- *【异步加载】
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步加载
- 异步缓存,异步加载
- 页面同步加载&&异步加载
- KVO 和 KVC 的使用和实现
- 让TextView一行显示并且溢出部分用省略号显示
- oracle 自定义函数
- 极光推送
- Solr入门之官方文档6.0阅读笔记系列(五) 第二部分结束
- 异步加载
- angular好用的插件集合(持续更新中)
- 2.while结合for判断回文数及其比较+菲波拉契序列
- association中aggregation和composition说明
- iOS 开发者账号申请与注册流程
- 为什么未来云计算的关键在于解放工程师
- 第11周项目-阅读程序写结果1
- 5-7 12-24小时制 (15分)
- pos终端规范