课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
无论是PC端软件开发还是移动端的app应用开发都需要对线程的使用有详细的规划。今天我们就一起来了解一下,移动端app软件的线程切换都有哪些方法。
Thread
Thread可以解决开启多个线程的问题。
Thread是Java中实现多线程的线程类,每个Thread对象都可以启动一个新的线程,注意是可以启动,也可以不启动新线程。
ThreadPool
Thread本身是需要占用内存的,开启/销毁过量的工作线程会造成过量的资源损耗,这种场景我们一般会通过对资源的复用来进行优化,针对IO资源我们会做IO复用(例如Http的KeepAlive),针对内存我们会做内存池复用(例如Fresco的内存池),针对CPU资源,我们一般会做线程复用,也就是线程池。
Runnable
Runnable主要解决如何定义每个线程的工作任务的问题。
Runnable是Java中实现多线程的接口,相对Thread而言,Runnable接口更容易扩展(不需要单继承),而且,Thread本身也是一种Runnable。
Callable
Callable和Runnable基本类似,但是Callable可以返回执行结果。
线程间通信
Thread和Runnable能实现切换到另一个线程工作(Runnable需要额外指派工作线程),但它们完成任务后就会退出,并不注重如何在线程间实现通信,所以切换线程时,还需要在线程间通信,这就需要一些线程间通信机制。
Future
一般来说,如果要做简单的通信,我们常用的是通过接口回调来实现。
Future就是这样一种接口,它可以部分地解决线程通信的问题,Future接口定义了done、canceled等回调函数,当工作线程的任务完成时,它会(在工作线程中)通过回调告知我们,我们再采用其他手段通知其他线程。
Handler
其实,完整的线程间通信机制,也是我们熟悉的线程间通信机制,莫过于Handler通信机制,Handler利用线程封闭的ThreadLocal维持一个消息队列,Handler的核心是通过这个消息队列来传递Message,从而实现线程间通信。
AsyncTask的多线程切换
回顾完多线程的几个基础概念,先来看看简单的多线程切换,Android自带的AsyncTask。
AsyncTask主要在doInBackground函数中定义工作线程的工作内容,在其他函数中定义主线程的工作内容,例如
onPostExecute,这里面必然涉及两个问题:
1.如何实现把doInBackground抛给工作线程
2.如何实现把onPostExecute抛给主线程。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。