android 多线程类,Android 多线程处理之多线程用法大集合
类型:服务器区大小:21KB语言:中文 评分:6.6
标签:
立即下载
第 3 页 ExecutorServie线程池
5.ExecutorServie线程池
通过Executors的静态方法来创建,一般有三种:
1.单线程 :Executors.newSingleThreadExecutor();
2.固定数量线程 :Executors.newFixedThreadPool();
3.动态线程 :Executors.newCachedThreadPool();
这里我们用固定5个线程来应用,使用方法是创建ExecutorService对象,然后执行submit(r)可以发起一个Runnable对象。用线程池来管理的好处是,可以保证系统稳定运行,适用与有大量线程,高工作量的情景下使用,假如要展示1000张图片如果创建1000个线程去加载,保证系统会死掉。用线程池就可以避免这个问题,可以用5个线程轮流执行,5个一组,执行完的线程不直接回收而是等待下次执行,这样对系统的开销就可以减小不少。
private void loadImagesByExecutors(final String url,final int id){
service.submit(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
Log.e("当前线程:", ""+Thread.currentThread().getName());
try {
final Drawable drawable = Drawable.createFromStream(new URL(url).openStream(), "image.gif");
mainHandler.post(new Runnable(){
@Override
public void run() {//这将在主线程运行
// TODO Auto-generated method stub
((ImageView)MainActivity.this.findViewById(id)).setImageDrawable(drawable);
}
});
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
Log:
其实可能没有说清楚,第一种不算多线程。
1.loadImagesByHandler()是通过Handler.post()方法,构建两个Handler进行通信。
2.loadImagesByThread(),这个是直接new Thread()发起线程,在主线程的handler处理消息
3.loadImageByAsyncTask(),这个用的是异步任务,所有实现在它的内部结构里,可以在里头操作Ui.
4.loadImagesByExecutors()用的是线程池,使得线程可控,保证稳定运行。
其实常用的就是后三种,第二个用法灵活,简单,但不适宜大数量任务;第三个一般适用于单个任务,一次性任务;第四个一般用于大数量,高密度执行的使用情景,比如批量加载图片,批量下载文件等。
看一眼图吧:
android 多线程类,Android 多线程处理之多线程用法大集合相关推荐
- android 初始化类,Android 常用编程技巧/Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)...
1.设置屏幕的亮度: WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.screenBrightness=1.0f; getW ...
- 转载 Android 多线程处理之多线程用法大集合
handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...
- android多线程文章,Android 多线程处理之多线程用法大集合
类型:服务器区大小:21KB语言:中文 评分:6.6 标签: 立即下载 第 4 页 全部源码 全部源码: 1 package com.bvin.exec; 2 3 import java.io.IOE ...
- c++ 多线程 类成员函数_多线程(C++/Python)
多线程(C++/Python) 本文包括一下内容: 通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现 ...
- android 管理类,android 线程管理类
1. 延时任务以及取消延时的应用场景:实时搜索,文字内容变化时候不发送请求,当停止变化指定时间后再发送请求 2. 使用方法: // 回到主线程 MainThreadHelper.runOnUIthre ...
- android webview 类,Android开罐头——WebView高可扩展性封装(二)
一.回顾与规划 回顾一下,我们在第一章中已经完成了一些封装: 我们看一下我们的目前的架构图片: 初步架构通信图 我们已经实现了: 抽象父类WebDelegate,用来管理webView的生命周期,以及 ...
- 百度地图android绘图类,Class:android总类/android离线地图类
出自百度地图API 跳转到:导航 , 搜索 com.baidu.mapapi 类 MKOfflineMap java.lang.Object ∟ com.baidu.mapapi.MKOfflineM ...
- android+坐标类,Android Path和PathMeasure类的使用之获取圆弧上的坐标值
问题: 已知图中的中心圆点在屏幕上的坐标为(x, y),分别求出点1.2.3.4的坐标值! 解决方法: 1)以圆点坐标(x,y)为中心画一个矩形RectF, 2)再通过Path类画一个90度(180- ...
- android pak文件_android 文件读写I/O 大集合 (持续更新)
一.资源文件 res/assets 资源类文件在程序编译后,据说是只能读取不能修改的,所以我就思考,是不是编译打包时,会自动把资源文件以二进制编译到程序包里?但是既然二进制bytes都可以修改,那么资 ...
最新文章
- git 命令详解_再次学习Git版本控制工具
- win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...
- QML笔记-QML基本数据类型的使用
- java 软考_关于软考
- 数字信号处理--语音信号变声报告
- docker开启远程访问后,重启失败的解决方案
- 如何选相应的尺寸码数
- 2021年施工员-土建方向-岗位技能(施工员)免费试题及施工员-土建方向-岗位技能(施工员)考试总结
- twitter推特全量用户收集与发文采集
- 国内十大源码下载类知名网站总体简评
- SmartRefreshLayout上拉刷新和下拉加载使用心得
- 【转】LTE基本架构
- 基于springboot实现大学生租房系统演示【附项目源码】
- AI云边端EasyCVR平台新功能解析:支持为角色选择多级分组
- CSR 蓝牙芯片运行SPP服务是PS 设置
- 什么是虚拟主机?云服务器的优劣势有哪些?
- GSMA移动360会议首次亮相马来西亚
- 《Effective C++》全局概述篇
- Python数据可视化 Pyecharts 制作 Parallel 平行坐标系
- 2021-08-14c++面向对象的三大特性之二——继承
热门文章
- Maven使用技巧001--- 离线更新nexus中央仓库索引的方案
- tomcat J2EEApplication=none,J2EEServer=none
- android开发之添加按钮事件的方法
- python 正交矩阵_协方差矩阵的计算、PCA
- 嵌入式操作系统内核原理和开发(事件)
- sql日期大于某天_(十五)sql/Linux 小技巧
- apk 打包 java出错_Android Release 打包提示 错误:找不到符号
- c语言if全部用法,关于if的用法
- c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
- php火的原因,重燃你的PHP安全之火