Android性能优化之使用线程池处理异步任务

来源:互联网 发布:php商城框架 编辑:程序博客网 时间:2024/06/05 04:21

       转载自:http://blog.csdn.net/u010687392/article/details/49850803

1、创建线程有两种方式:

       (1)继承Thread类 
       (2)实现Runnable接口

       区别:

       在多线程访问同一资源的情况下,用Runnable接口创建的线程可以处理同一资源,而用Thread类创建的线程则各自独立处理,各自拥有自己的资源。

       所以,在Java中大多数多线程程序都是通过实现Runnable来完成的,而对于Android来说也不例外,当涉及到需要开启线程去完成某件事时,我们都会这样写:

  new Thread(new Runnable() {

@Override

publicvoidrun() {

//do sth .

}

}).start();

这段代码创建了一个线程并执行,它在任务结束后GC会自动回收该线程,一切看起来如此美妙,是的,它在线程并发不多的程序中确实不错,

而假如这个程序有很多地方需要开启大量线程来处理任务,那么如果还是用上述的方式去创建线程处理的话,那么将导致系统的性能表现的非常糟糕,

更别说在内存有限的移动设备上,主要的影响如下:

1、线程的创建和销毁都需要时间,当有大量的线程创建和销毁时,那么这些时间的消耗则比较明显,将导致性能上的缺失

2、大量的线程创建、执行和销毁是非常耗cpu和内存的,这样将直接影响系统的吞吐量,导致性能急剧下降,如果内存资源占用的比较多,还很

可能造成OOM

3、大量的线程的创建和销毁很容易导致GC频繁的执行,从而发生内存抖动现象,而发生了内存抖动,对于移动端来说,最大的影响就是造成界面卡顿

        而针对上述所描述的问题,解决的办法归根到底就是:重用已有的线程,从而减少线程的创建。 
       所以这就涉及到线程池(ExecutorService)的概念了,线程池的基本作用就是进行线程的复用,下面将具体介绍线程池的使用

2、

ExecutorService


阅读全文
0 0