Android中的线程
来源:互联网 发布:linux重启网卡失败 编辑:程序博客网 时间:2024/06/07 16:15
Android中的线程
- 在Android开发中,请求网络数据,会是一项耗时的操作,而在主线程中是不能进行耗时操作的,因为主线程超过5秒就会报ANR,所以当进行耗时操作就要开启子线程,通过子线程来完成耗时的操作。
- Android中开启线程的方式有很多,比如:runOnUiThread,Thread+Handler,AyncTask等等
- 如果只是简简单单的更新UI,可以直接使用runOnUiThread,就可以了
- Thread+Handler
- 如果需要子线程去完成耗时的操作,从网络中请求数据,然后显示在界面上,就通过new Thread,在里面进行耗时操作,在主线程中创建一个handler,通过handler发送数据,在handler对象中通过handleMessage来更新UI。
- 使用Thread+Handler要比AsyncTask功能更强大一些。但是没有AsyncTask灵活
- AsyncTask
- AsyncTask 在主线程通过execute()开启任务;
- doInBackground方法里面就是运行子线程中的方法,在这个里面进行联网耗时的操作;
- onProgressUpdate,在调用publishProgress时,此方法被执行,直接将进度信息更新到UI组件上;
onPostExecute方法是后台操作完成之后才调用,在这里面可以取消进度条(更新UI)。
AsyncTask受局限的就是它只能运行一次,再运行的话,会报异常,因为在它的内部设置了三种状态:没运行,正在运行,运行结束。在里面做了一个判断,如果当前不是还没有运行,接下来使用switch,case了剩下的两种状态,均抛出异常。内部还有一个线程池,把Runable的子类传到它的execute()方法中。内部有一个handler,Message,在执行完DoInBackground方法后,通过handler发送消息,把数据传给了主线程,执行onPostExecute方法。
线程池,JDK自带线程池的实现类ThreadPoolExecutor
- 提升性能
- 防止内存过度消耗。控制活动线程的数量,防止并发线程过多。
- 里面接收的参数有核心线程数,最大线程数,线程池维护线程所允许的空闲时间,线程池维护线程所允许的空闲时间的单位,线程池所使用的缓冲队列;(线程池对拒绝任务的处理策略。。。)
之后的明天再补充吧
0 0
- Android中的线程模型
- Android中的线程模型
- Android中的线程模型
- Android中的线程模型
- Android中的线程模型
- Android中的线程
- Android中的线程机制
- Android中的线程模型,
- Android中的线程
- Android中的线程处理
- android中的线程
- Android中的线程处理
- Android中的线程池
- Android中的线程小结
- Android中的线程同步
- android中的线程操作
- Android中的异步线程
- android 中的线程倒计时
- SQL Server 创建索引分区
- 动态规划-3007
- 【java并发】线程技术之死锁问题
- 关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
- 两个字符串比较求最优算法
- Android中的线程
- spark 数据类型(Data Types)
- 企业移动应用开发管理之浅谈
- Quartz-2.2.x 入门
- 深入理解log机制
- MVC模式的增删改查(以注册为例)
- Android开发中如何解决加载大图片时内存溢出的问题
- Java语言一些记录
- 在Visual Studio 2010中使用Visual Leak Detector