关于安卓异步加载Asynctask的学习笔记

本人菜鸟一枚,刚看完了安卓异步加载的一个视频,这个视频之前在幕客网上也看过,不过,菜鸟就是菜鸟,当初没怎么在意,现在看了一遍,才有了些想法,所以,写了这篇笔记,已整理自己的学习体会.

1.首先,什么是Asynctask,?

   这点就得从安卓的机制说起,安卓的UI线程是一个主线程,假如我们在UI线程里面做些耗时的操作,例如,从网上获取资源,,那么,恭喜你,这个程序有可能会报错,大概内容可能会说APP无反应, .

   接下来呢,就给了我们一个提示,对于耗时的操作,我们必须把这些操作放在另外一个线程中执行,也就是所谓的多线程.

   关于多线程,可有有人会问?那么我使用java的线程类去开发,行不行呢? 不使用这个所谓额Asynctask.   这个答案当然是可以的.

  毕竟安卓也是基于java的嘛.不过呢,安卓的Asynctask是一个已经封装过了的工具,以供我们使用,相对于java的线程来说,使用较为简单些.不过据说Asynctask和java的线程也是有些区别的,具体内容,本笔记不会做论述,有兴趣的道友可以查看其他资料,当然也希望告知菜鸟这个区别,毕竟菜鸟一枚,不懂啊.

2.Asynctask的具体使用:

  首先我们要新建一个类,继承这个Asynctask类   ,这时候需要传入三个参数,第一个参数是你需要传入的数据类型,第二个参数是进度过程的参数类型,简单点可以是Integer类型,第三个参数是异步操作后返回的参数类型.

接着呢,需要重载几个方法,  分别是 doinbackground() ,  onpreexcute(),    onpostexcute(),   三个方法,另外还有一个 跟进度有关的方法,好像叫做什么progress的,算了  不管.

接下来,说说这几个方法的回调顺序.

首先会执行的呢是onpreexcute()  然后是doinbackground(),,,,然后是onpostexcute().

关于初始化一些操作可以在onpreexcute()里边执行,,,然后doinbackground()  顾名思义 是后台执行的,负责耗时的操作,  操作后的结果可以在onpostexcute()函数里边跟UI线程通信.

说起跟UI通信,请注意,只可以在onpreexcute()  和onpostexcute() 这两个方法里边执行,不可以在doinbackground()里边执行.

调用Asynctask  只需要在对应的activity中new一个对象出来 并且调用他的excute()方法就可以了.

另外需要注意的地方是,调用Asynctask,是开启一个线程,那么假如我从对应的activity退出后,再重新创建这个activity,就会又开启了一个线程,但是我们的Asynctask是直接从线程池里边拿线程出来的,所以当重复几次这样的操作后,就会出现一种情况,后开启的线程  必须等待前面线程执行完后才能执行,准确的说是,才有线程可以拿.

因此Asynctask最好和对应的activity同步关联起来,例如在对应的activity的onpause()方法中调用Asynctask的cancle方法,但是请注意cancel方法只是对线程做了一个cancle的标志,并没有真正的杀死线程,因此我们还需要在Asynctask的相关回调方法中检查线程的是否有cancle的标志,并执行相对应的操作.

毕竟我们再java中没有办法可以真正的杀死一个线程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值