Android线程的正确使用姿势

阅读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得耗时操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值