android的线程利器之AsyncTask

java自带的线程已经慢不错的了,在android里又进了一步。一开始,在java传统的Thread和Runnable里加上了handler就已经蛮不错的了,handler作为信息调配的中转站,让人用的很输入,线程就只管去计算,分配的事就不要你做了。我写的东西有点杂乱无章,呵呵。再后来就到了高级一点的HandlerThread,把资源费配的Handler和线程Thread放在了一起,我比较喜欢的是,重新启动一个线程非常的方便。

这样一下就可以了,线程已经被启动,而且可以调用HandlerThread类自带的。然后调用getLooper调取线程里的消息循环,送入handleMessage来处理。

getLooper是HandlerThread也是帮我们封装好了的。

如果要自己打包消息循环就可以这样做,JDK文档上就是这么写的:

 Threads by default do not have a message loop associated with them; to create one, call prepare() in the thread that is to run the loop, and then loop() to have it process messages until the loop is stopped

线程默认是不会有一个与之相关的消息队列,你必须调用prepare()方法来创建,然后用静态方法loop()来将消息加入进去,知道循环的结束。

以上"传统"的方式还是比较的负责,当我们拥有了HandlerThread后一切边的比较的简单了:

 

一般,情况下这里的东西已经很适用,但是google就是技术届的大哥大,非要把技术更上一层楼,所有有出现了:AsyncTask

这个东西非常的好,比HandlerThread封装的还要厉害。先看代码

 

AsyncTask线程我觉得最大的作用就是在后台新建一个线程来计算,然后把计算得到的结果用onPostExecute来更新UI线程。在android中,子线程是不能直接操作主线程(UI线程),只能通过子线程的某个方法来把计算结果让这个方法来处理。先看看AsyncTask构造方法的源码:

重点看这里:

这里就是handlerMessage处理 消息了,也就是封装了我们的xhandler extends Handler(){}.....。还有一个重要的是doInBackground是在新线程里面的,起码的方法是在主线程里的,也就验证了,doInBackground在新线程里处理或者计算,然后调用对应在主线程里的方法来更新UI

 

对于移动设备来说,多线程的处理是非常之重要的。我也是才开始看android的,有什么说的不对的,请大家拍砖,大家共同进步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值