android 使用主线程模型,为了使用户体验良好,耗时操作需要使用多线程来完成。
那么使用多线程的一般逻辑是什么呢?
在耗时的3个大户是。
1. 本地io操作。包括读写数据库,读写xml等本地文件。
2. 网络io操作。
3. ui 框架的 measure - layout - draw 流程。
其中3 是主线程中要做的事,这里不涉及多线程,不考虑。
其中1是可控的耗时操作。本地的io操作,虽然是耗时操作,但是耗时基本是在某个范围内,是程序员可控的。
其中2是不可控的耗时操作。网络的io操作,外界环境等不稳定因素很多,是程序员不可控的。
对于1,一般的多线程操作是用一个守护线程来搞定。如:Timer, HandlerThread等。
对于2,因为不可控,如果其中一个耗时任务出现问题,耗时太久,用一个守护线程来做,数据更新不及时,用户体验会不太好。
这种情况一般用线程池来处理。