Android 线程管理

#线程管理
作为一个老鸟,不要告诉我,你的线程还都是野线程,没有一个统一的管理。

执行定时任务

ScheduledThreadPoolExecutor代替Timer

//手动创建线程池,根据alibaba代码规约 避免使用Executors 创建线程池
mScheduledExecutorService = new ScheduledThreadPoolExecutor(1);

创建线程池

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,  
                              int maximumPoolSize,  
                              long keepAliveTime,  
                              TimeUnit unit,  
                              BlockingQueue<Runnable> workQueue,  
                              ThreadFactory threadFactory,  
                              RejectedExecutionHandler handler)   

参数说明:

  • corePoolSize 线程池中核心线程的数量
  • maximumPoolSize 线程池中最大线程数量
  • keepAliveTime 非核心线程的超时时长,当系统中非核心线程闲置时间超过keepAliveTime之后,则会被回收。如果ThreadPoolExecutor的allowCoreThreadTimeOut属性设置为true,则该参数也表示核心线程的超时时长
  • unit 第三个参数的单位,有纳秒、微秒、毫秒、秒、分、时、天等
  • workQueue 线程池中的任务队列,该队列主要用来存储已经被提交但是尚未执行的任务。存储在这里的任务是由ThreadPoolExecutor的execute方法提交来的。
    threadFactory 为线程池提供创建新线程的功能,这个我们一般使用默认即可
    handler 拒绝策略,当线程无法执行新任务时(一般是由于线程池中的线程数量已经达到最大数或者线程池关闭导致的),默认情况下,当线程池无法处理新线程时,会抛出一个RejectedExecutionException。

针对于workQueue参数我多说几点:workQueue是一个BlockingQueue类型,那么这个BlockingQueue又是什么呢?它是一个特殊的队列,当我们从BlockingQueue中取数据时,如果BlockingQueue是空的,则取数据的操作会进入到阻塞状态,当BlockingQueue中有了新数据时,这个取数据的操作又会被重新唤醒。同理,如果BlockingQueue中的数据已经满了,往BlockingQueue中存数据的操作又会进入阻塞状态,直到BlockingQueue中又有新的空间,存数据的操作又会被冲洗唤醒。BlockingQueue有多种不同的实现类,下面我举几个例子来说一下:
1.ArrayBlockingQueue:这个表示一个规定了大小的BlockingQueue,ArrayBlockingQueue的构造函数接受一个int类型的数据,该数据表示BlockingQueue的大小,存储在ArrayBlockingQueue中的元素按照FIFO(先进先出)的方式来进行存取。
2.LinkedBlockingQueue:这个表示一个大小不确定的BlockingQueue,在LinkedBlockingQueue的构造方法中可以传一个int类型的数据,这样创建出来的LinkedBlockingQueue是有大小的,也可以不传,不传的话,LinkedBlockingQueue的大小就为Integer.MAX_VALUE
以上用法转至:http://blog.csdn.net/u012702547/article/details/52259529

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android线程可以分为以下几种类型: 1. 主线程(UI线程):也称为主线程或UI线程,负责处理用户界面的更新和响应。它是Android应用程序的主要线程,用于处理用户交互和更新UI元素。例如,点击按钮、滑动屏幕等操作都在主线程中处理。 2. 后台线程:后台线程用于执行一些相对较长时间的操作,以避免阻塞主线程。这些线程通常用于执行耗时任务,如网络请求、文件读写操作等。后台线程与主线程是分离的,它们可以并行执行,不会影响用户界面的响应性能。 3. 异步任务(AsyncTask):AsyncTask是Android提供的一个方便的工具类,用于在后台线程执行异步操作,并在主线程中更新UI。它简化了后台任务的管理和与UI的交互。AsyncTask通常用于执行一些需要与用户界面交互的耗时操作,如下载文件、加载数据等。 4. Handler线程:Handler是Android中消息处理的机制,它可以与线程配合使用,实现在指定线程中处理消息。通过Handler,我们可以将任务发送到指定线程的消息队列中,然后在该线程中处理这些消息。Handler线程常常与Looper循环一起使用,使得线程可以接收并处理消息。 5. IntentService线程:IntentService是一种特殊的后台服务,用于执行一系列耗时任务。它在后台线程中逐个处理每个请求,并在完成后自动停止。IntentService适合于执行一些短暂的异步操作,如数据同步、推送通知等。 这些线程类型在Android开发中经常使用,可以根据不同的需求选择合适的线程类型来处理相应的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值