AsyncTask、Thread 写法
来源:互联网 发布:p2p网络管理 编辑:程序博客网 时间:2024/06/17 14:55
面试总是会被问到handler、message巴拉巴拉的,说起AsyncTask就会问它有哪些方法?分别干什么的。。。
天天用当然知道干嘛的,可每次一写就自动生成了,我这种重在出结果的人真没怎么注意到每一个方法名怎么拼,具体还要说在那个线程运行,,,好吧,都是借口,基础不够扎实。但是并不影响我做项目开发,我知道该干什么怎么用,,,然而面试官并不会搭理你这些的。。。哎,,
记几个线程的写法
第一种 继承Thread
第一种:继承Thread,重写run()方法,郭霖大神的书里说”继承的耦合性有点高 ”,大学背过的知识点忘记了,去查了一下,大致意思就是,耦合性越高模块间的关联就越密切,从而模块独立性越差。用线程就是为了单独分离出来执行些耗时操作,所以一般选择第二种:实现接口形式的。
class ThreadOne extends Thread { @Override public void run() { //处理逻辑 } } //使用 new ThreadOne().start();
第二种 实现Runnable接口
第二种,实现Runnable接口:
class ThreadTwo implements Runnable{ @Override public void run() { //处理逻辑 } } //使用 ThreadTwo threadTwo=new ThreadTwo(); new Thread(threadTwo).start();
//常见写法:使用匿名类的方式
new Thread(new Runnable() { @Override public void run() { //逻辑 } }).start();
异步消息处理机制
Android提供了一套异步消息处理机制,主要由4个部分组成:Message、Handler、MessageQueue、Looper。
其实平时用的能看到的也就Handler和message,如果只知道这俩说明知道怎么用,不过机制也弄懂才能进阶嘛,所有的技术点都是,不懂原理机制再聪明也做不到融汇贯通的。
这是第一行代码2中的一张图:平时使用的时候,都是
先创建一个Handler对象,并重写handleMessage()。
在需要操作UI的时候,创建Message对象,通过Handler发送出去。
具体内部原理看了下其他大神的详细源码分析,懂了些,希望过一段时间,我也能看源码自己找答案了。我现在就不班门弄斧了。简单记:
消息发出后,会被添加到MessageQueue的队列(先进先出)中等待被处理
Looper则会一直尝试从MessageQueue中读取待处理消息(有就读取没有就等待)
最后分发回handlerMwssage()方法中。
注:一个线程只会有一个消息队列(MessageQueue),也只有一个Looper对象来管理消息队列,但一个Looper可以对应对个Handler(处理者)
AsyncTask
Android提供的傻瓜式工具真是害人不浅,能让你啥都不懂就能开发,不过也是因为这一点,自己才能没学明白呢就可以养活自己了。不过现在既然干了这行,不能混,该懂得是一定要弄懂得。
AsyncTask是Android基于上述异步消息处理机制封装的工具,可以十分简单的崇子线程切换到主线程。看下用法;
- AsyncTask是一个抽象类,只能创建一个子类去继承它。(本来想查一查抽象类的具体含义,结果看到一篇说的不错的文章:http://blog.csdn.net/chenssy/article/details/12858267,路过可以看一下)
- 重写AsyncTask的几个方法完成对任务的定制
- 完整写法
public class AsyncTask_addClientCar extends AsyncTask<String, integer, String> { Handler hdler; public AsyncTask_addClientCar(Handler h) { super(); hdler = h; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { String result = null; String clientId = params[0]; String licensePlate = params[1]; String licenseZone = params[2]; String isCurrent = params[3]; String Name = params[4]; String VehicleLicenseNo = params[5]; Map<String, String> pm = new HashMap<String, String>(); pm.put("clientId", clientId); pm.put("licensePlate", licensePlate); pm.put("licenseZone", licenseZone); pm.put("isCurrent", isCurrent); pm.put("carbrandId", Name); pm.put("VehicleLicenseNo", VehicleLicenseNo); try { result = HttpUtils.sendPushRequest(Config.URL_addClientCar, pm); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } @Override protected void onProgressUpdate(integer... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); bindBean bean = new JsonParser<bindBean>().parserJsonBean(result, bindBean.class); hdler.sendMessage(hdler.obtainMessage(1, bean)); }}
- 调用
new AsyncTask_addClientCar(handler).execute(clientId,licensePlate,licenseZone,"0",name,VehicleLicenseNo);
- AsyncTask、Thread 写法
- AsyncTask VS Thread+Handler
- Thread ,Service 和 AsyncTask
- IntentService AsyncTask,Thread
- AsyncTask与Thread+Handler
- Thread and AsyncTask
- thread & asynctask 的使用
- AsyncTask 与Handler+Thread
- 关于Thread与Asynctask
- Thread和AsyncTask使用:
- 异步AsyncTask,怎样停止AsyncTask和Thread
- AsyncTask对比Thread加Handler
- 怎样停止AsyncTask和Thread
- AsyncTask对比Thread加Handler
- AsyncTask对比Thread加Handler
- handler thread asynctask runnable 分析
- Some Code About Thread & AsyncTask
- android 多线程Thread,Runnable,AsyncTask
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- Spring设计模式之JDK的动态代理!
- 手机网络连接类型判断 2/3/4G网络 WiFi和无网络 工具类
- Android universal-Image-Loader原理详解
- LINUX中常用操作命令
- AsyncTask、Thread 写法
- 疯狂Activiti6连载(1)Activiti介绍
- 一个故事讲清楚 NIO
- 第一篇博客
- 优先级队列priority_queue
- 【bzoj5088】HDU 6000 Wash
- nginx(5)变量转载自章亦春
- Mac版IDEA快捷键配置
- 第七章