阅读http://android.jobbole.com/82440/ 后做的回忆笔记。
Android造成卡顿的原因之一是在UI线程上进行了耗时操作,我们都知道开启子线程来处理。但是是否合理地使用线程,将影响到是否能得到预期的目的,有时候开启太多线程处理反而成为UI卡顿的原因之一,首先每个线程的开启至少需要消耗64KB的内存,其次线程开多了,会与UI线程争夺时间片。
Android是基于精简后的Linux内核的。Linux的线程调度采用时间片分配策略,会考虑到 优先级和公平性。 意思是 优先级高的线程会优先分配到时间片,当优先级低的线程等待过长时间后,考虑到公平性,也会给低优先级的线程分配时间片。这样处理的结果是,高优先级线程在分配时间片上就缺少了绝对的竞争力。
为了解决这一问题,Android提出了 CGroup的策略。其中最为重要的2个group是default group和background group。 background group中全部的线程获得的时间片只为5%~10%,而default group 能获得 90%的时间片。
了解了这些以后,我们在创建子线程事,如需要处理的任务并非与UI绘制相同重要,则可手动设置其优先级为 background。
Android中启用线程的方式:
1.new Thread(), 缺少处理完结果后,通知主线程绘制UI的能力。
2.AsycTask 容易内存泄露,不同版本串并行处理不一致 。
3.HandlerThread ,用于串行处理大量短时任务。
4.ThreadPoolExeqtor. 并发多任务。
4.IntentService,处理非UI得耗时操作。