Android线程与线程池(一)

前言,学习安卓很久了,一直也没有学博客的习惯,下决心从今天开始要养成写博客总结学习经验的好习惯!


一.Android中线程与线程池的简介

在Android中线程主要可以分为两大类:一个用于处理界面相关与用户交互的线程-主线程;一个用于处理耗时任务-子线程。因为学习Android的我们都会知道,在主线程中是不可以做耗时任务的,这样会导致界面卡顿影响与用户的交互体验。Android中扮演者线程角色的有很多,比如:AsyncTask,IntentService,HandlerThread。我们先简要介绍他们各自的特点,然后逐个进行深入理解学习。


二 .扮演着线程角色的各自特点

1.AsyncTask:封装了线程池和Handler,主要为了方便在子线程更新UI。

2.HandlerThread:是一个具有消息循环的线程,在其内部可以使用Handler。

3.IntentService:它本身是一个服务,这就保证其不容易被系统回收,能够长时间存活在后台。其内部采用HandlerThread来之行任务,当任务执行完毕后IntentService会自动退出。

三.主线程和子线程


在Android中主线程就是UI线程。主要作用运行四大组件以及处理界面交互相关的逻辑,因为用户随时会和界面发生交互,因为主线程在任何时候都要求具有较高的响应速度,否则就会产一种界面卡顿的感觉。为了保持较高的响应速度,这就要求主线程中不能执行耗时的任务,耗时任务转移到子线程中执行。子线程在Android中就是除了主线程之外的所有的线程。从Android3.0开始访问网络的请求必须在子线程中进行,否则会抛出NetworkOnMainThreadException异常,这样做就是为了避免主线程阻塞而出现ANR现象。

四.线程池

1.概念:Android中线程池的概念来源于Java中deExecutor,Executor是一个接口,而且只有一个execute()方法。

public interface Executor {

    /**
     * Executes the given command at some time in the future.  The command
     * may execute in a new thread, in a pooled thread, or in the calling
     * thread, at the discretion of the {@code Executor} implementation.
     *
     * @param command the runnable task
     * @throws RejectedExecutionException if this task cannot be
     * accepted for execution
     * @throws NullPointerException if command is null
     */
    void execute(Runnable command);
}
真正的线程池实现则是ThreadPollExecutor,ThreadPollExecutor提供了一系列参数来允许配置不同特点的线程池。

2.线程池的优点

(1),线程的复用,线程池可以重用线程池中的线程,避免因为现成的创建和销毁所带来的性能开销。

(2).能够有效的控制线程的最大并发数,避免大量的线程之间互相抢占系统资源二导致的阻塞现象。

(3).能够对线程进行简单的管理,并提供定时执行任务以及指定间隔循环执行任务的功能。




发布了11 篇原创文章 · 获赞 3 · 访问量 2749

猜你喜欢

转载自blog.csdn.net/KyungLip/article/details/52288782