本文共 1342 字,大约阅读时间需要 4 分钟。
原文地址:
大量的数据处理往往需要花费很长的时间,但如果将这些工作切分并行处理,那么它的速度与效率就会提升很多。在拥有多线程处理器的设备中,系统可以使线程并行运行。比如,使用多线程将图像文件切分解码展示要比单一线程解码快得多。
这章我内容们将会学习如何设置并使用多线程及线程池。我们还会学习如何在一个线程中运行代码以及如何使该线程与UI线程进行通信。
这节课我们会学习如何实现接口,该接口中的方法会在线程中单独执行。你也可以将对象传递给一个类。这种执行特定任务的对象在某些时候被称为任务。
类与类同属于基础类,它们仅提供了有限的功能。它们是比如, , 以及等线程功能类的基础核心。这两个类同样属于的核心基础。ThreadPoolExecutor会自动管理线程以及任务队列,它甚至还可以使多个线程同时执行。
实现一个对象很简单:
public class PhotoDecodeRunnable implements Runnable { ... @Override public void run() { /* * Code you want to run on the thread goes here */ ... } ...}
在的实现类中,的方法中所含的代码将会被执行。通常来说,中可以做任何事情。要记得,这里的不会运行在UI线程,所以在它内部不能直接修改对象这种UI对象。如果要与UI线程通讯,你需要使用到课程中所描述的技术。
在方法的开头处设置当前的线程使用后台优先级。这种方式可以减少对象所属线程与UI线程的资源争夺问题。
这里还将对象所属的线程引用存储了起来。由可以获得当前的线程对象。
下面是代码的具体实现方式:
class PhotoDecodeRunnable implements Runnable {... /* * Defines the code to run for this task. */ @Override public void run() { // Moves the current Thread into the background android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); ... /* * Stores the current Thread in the PhotoTask instance, * so that the instance * can interrupt the Thread. */ mPhotoTask.setImageDecodeThread(Thread.currentThread()); ... }...}
转载地址:http://vopzl.baihongyu.com/