在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的。更别提下载这样相当耗时的代码操作了。为了解决这个问题,所以多线程诞生了。
耗时的任务我们开一个子线程,子线程去执行耗时的代码操作,做完主线程交给的任务,结束自己这个线程。这样主线程就可以继续16ms就绘制一次UI,因此菊花就会正常转动了。
那么在android中如何开线程做耗时任务呢?Android框架给我们提供了这样4个方案:
1.AsyncTask
AysncTask是一个最常用的耗时任务异步处理方案。他的优势在于可以轻松完成耗时任
Android耗时任务处理方案--AsyncTask
最新推荐文章于 2024-08-28 10:00:00 发布