当前位置: 首页 > news >正文

【转】Android开发之线程池使用总结

[转]江南一点雨的博客专栏-Android开发之线程池使用总结

线程池算是Android开发中非常常用的一个东西了,只要涉及到线程的地方,大多数情况下都会涉及到线程池。Android开发中线程池的使用和Java中线程池的使用基本一致。那么今天我想来总结一下Android开发中线程池的使用。

OK,假如说我想做一个新闻应用,ListView上有一个item,每个item上都有一张图片需要从网络上加载,如果不使用线程池,你可能通过下面的方式来开启一个新线程:

new Thread(new Runnable() {               @Override               public void run() {                   //网络访问               }           }).start(); 这种用法主要存在以下3点问题: ##1.使用new Thread()创建线程存在的问题 1.针对每一个item都创建一个新线程,这样会导致频繁的创建线程,线程执行完之后又被回收,又会导致频繁的GC 2.这么多线程缺乏统一管理,各线程之间互相竞争,降低程序的运行效率,手机页面卡顿,甚至会导致程序崩溃 3.如果一个item滑出页面,则要停止该item上图片的加载,但是如果使用这种方式来创建线程,则无法实现线程停止执行

如果使用线程池,我们就可以很好的解决以上三个问题。

##2.使用线程池的好处 1.重用已经创建的好的线程,避免频繁创建进而导致的频繁GC 2.控制线程并发数,合理使用系统资源,提高应用性能 3.可以有效的控制线程的执行,比如定时执行,取消执行等

OK,我们知道Android中的线程池其实源于Java,Java中和线程有关的东东叫做Executor,Executor本身是一个接口,这个接口有一个非常有用的实现类叫做ThreadPoolExecutor,如下:

转载于:https://juejin.im/post/5a30f3a3f265da430e4f277a

相关文章:

  • 小知识三、USerDefault我换个姿势来实现
  • 581 Shortest Unsorted Continuous Subarray
  • v4l2 Camera详细设置【转】
  • iOS核心动画高级技术(十三) 高效绘图
  • ant任务调用和参数传递
  • 好玩的 RAC
  • Matlab2013a许可证过期问题,反复提示激活
  • 北京司法网拍首尝线下预展 海淀法院900万红木家具亮相京东秋拍
  • java进阶-常用数据结构以及算法思想
  • Nginx服务状态的监控
  • spring cloud Dalston.SR4 feign 实际开发中踩坑(二)
  • Kibana插件sentinl实现邮件报警
  • Vue slot分发内容
  • 前端面试总结(at, md)
  • Webpack入门之遇到的那些坑,系列示例Demo
  • php的引用
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Angular 响应式表单之下拉框
  • CentOS7简单部署NFS
  • Javascript设计模式学习之Observer(观察者)模式
  • js 实现textarea输入字数提示
  • Laravel Telescope:优雅的应用调试工具
  • Laravel核心解读--Facades
  • leetcode388. Longest Absolute File Path
  • Python中eval与exec的使用及区别
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 复杂数据处理
  • 基于HAProxy的高性能缓存服务器nuster
  • 精彩代码 vue.js
  • 如何合理的规划jvm性能调优
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 实战|智能家居行业移动应用性能分析
  • 原生Ajax
  • 云大使推广中的常见热门问题
  • 阿里云ACE认证学习知识点梳理
  • ​secrets --- 生成管理密码的安全随机数​
  • ​插件化DPI在商用WIFI中的价值
  • ​用户画像从0到100的构建思路
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)bark-ml
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • .Net 4.0并行库实用性演练
  • .net网站发布-允许更新此预编译站点
  • :not(:first-child)和:not(:last-child)的用法
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [16/N]论得趣
  • [Angular] 笔记 18:Angular Router
  • [BUUCTF 2018]Online Tool(特详解)
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [CakePHP] 在Controller中使用Helper