Android耗时任务处理方案--AsyncTask

本文介绍了Android应用中主线程的运行原理和UI线程的重要性,强调了耗时任务不能在主线程执行,从而引出AsyncTask、HandlerThread、ThreadPool和IntentService等异步处理方案。重点讨论了AsyncTask的使用,特别是其基于Handler的内部机制,以及当AsyncTask作为Activity内部类时可能出现的内存泄漏问题和解决办法。
摘要由CSDN通过智能技术生成

在android应用中,每一个应用都对应一个进程,而应用的进程默认情况下只会开启一个线程即主线程。所有的操作都发生在主线程(或者称为UI线程)。
主线程的生死存亡是和进程一致的。
运行在UI线程中的操作主要有System Event, Input Event, Application, Service, Alarm, UI Drawing.这些类的代码都会执行在UI线程中。而且在这类操作中写的所有代码,包括自己写的代码也都会在UI线程执行。所以,可以看出UI线程真的比较繁忙。
假如你给一个Button 上一个监听器,他的功能是执行一个耗时的操作(比如下载),而你写的所有关于下载的代码都放在onClick方法中。这就会出现对UI线程的阻塞,而且这个阻塞会让UI线程中其他所有的工作都等待他执行完再进行!简单一点说就是:运行在UI线程中的操作System Event, Input Event, Application, Service, Alarm, UI Drawing都要会等待着!想一想,下载过程中如果用户戳你的屏幕,点一个输入框都不会有任何反应,如果有一个转菊花的动画,那朵菊花也会卡住,就是因为你的代码太耗时了。严重的情况下应用就会直接崩溃掉。这对于用户来说是一件非常灾难性的事情。
非常重要的一点就是UI线程还负责UI 渲染绘制。就比如说转菊花这个动画,菊花之所以能转,就是因为主线程每16ms就绘制一次屏幕。为了保证UI界面的流畅,就必须把任何UI线程的代码执行操作耗时限制在16ms以内。否则菊花就会卡住(遗漏了很多帧画面的绘制)。
如此严苛的代码执行16ms耗时限制肯定不能完成多数的耗时操作,哪怕是解析Json的工作也是耗时大概百ms的。更别提下载这样相当耗时的代码操作了。为了解决这个问题,所以多线程诞生了。
耗时的任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值