Android线程的正确使用姿势
2016-04-21 23:16
429 查看
阅读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得耗时操作。
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得耗时操作。
相关文章推荐
- Android借鉴支付宝的思路解决 GridView网格线粗细的问题
- Android Annotations框架学习
- 【Android】内存泄漏调试
- android 横竖屏切换
- AndroidStudio的Gradle笔记
- Android中短信的收发机制 发送短信 接收短信 拦截短信 监听短信
- Android中的属性动画:
- Android中电话相关操作
- 帧动画,Android中的动画 --Frame Animation
- 安卓头像.本地获取图片和拍照
- Android中IntentService详解
- Android中的通知 --- Notification
- Android中framework层的cpp文件中调用native层c函数的方法
- Android ThreadLocal及InheritableThreadLocal分析
- Android--自定义View滑动的六种方法
- 导入android项目的时候,activity等android中的东西都提示错误
- Android 学习笔记之二 Netspeed
- Android 应用退到后台
- Android自定义控件:仿美团下拉菜单及相关代码优化
- Android属性动画实现TextView类似支付宝余额数字滚动