AsyncTask、Thread 写法

面试总是会被问到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的几个方法完成对任务的定制

这里写图片描述

  • 完整写法
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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值