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
原创粉丝点击