Android中的线程

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值