Android官方开发文档Training系列课程中文版:线程执行操作之定义线程执行代码
原文地址:http://android.xsoftlab.net/training/multiple-threads/index.html
引言
大量的數(shù)據(jù)處理往往需要花費(fèi)很長的時(shí)間,但如果將這些工作切分并行處理,那么它的速度與效率就會(huì)提升很多。在擁有多線程處理器的設(shè)備中,系統(tǒng)可以使線程并行運(yùn)行。比如,使用多線程將圖像文件切分解碼展示要比單一線程解碼快得多。
這章我內(nèi)容們將會(huì)學(xué)習(xí)如何設(shè)置并使用多線程及線程池。我們還會(huì)學(xué)習(xí)如何在一個(gè)線程中運(yùn)行代碼以及如何使該線程與UI線程進(jìn)行通信。
定義在線程中運(yùn)行代碼
這節(jié)課我們會(huì)學(xué)習(xí)如何實(shí)現(xiàn)Runnable接口,該接口中的run()方法會(huì)在線程中單獨(dú)執(zhí)行。你也可以將Runnable對(duì)象傳遞給一個(gè)Thread類。這種執(zhí)行特定任務(wù)的Runnable對(duì)象在某些時(shí)候被稱為任務(wù)。
Thread類與Runnable類同屬于基礎(chǔ)類,它們僅提供了有限的功能。它們是比如HandlerThread, AsyncTask, 以及IntentService等線程功能類的基礎(chǔ)核心。這兩個(gè)類同樣屬于ThreadPoolExecutor的核心基礎(chǔ)。ThreadPoolExecutor會(huì)自動(dòng)管理線程以及任務(wù)隊(duì)列,它甚至還可以使多個(gè)線程同時(shí)執(zhí)行。
定義Runnable實(shí)現(xiàn)類
實(shí)現(xiàn)一個(gè)Runnable對(duì)象很簡單:
public class PhotoDecodeRunnable implements Runnable {...@Overridepublic void run() {/** Code you want to run on the thread goes here*/...}... }實(shí)現(xiàn)run()方法
在Runnable的實(shí)現(xiàn)類中,Runnable的run()方法中所含的代碼將會(huì)被執(zhí)行。通常來說,Runnable中可以做任何事情。要記得,這里的Runnable不會(huì)運(yùn)行在UI線程,所以在它內(nèi)部不能直接修改View對(duì)象這種UI對(duì)象。如果要與UI線程通訊,你需要使用到Communicate with the UI Thread課程中所描述的技術(shù)。
在run()方法的開頭處設(shè)置當(dāng)前的線程使用后臺(tái)優(yōu)先級(jí)。這種方式可以減少Runnable對(duì)象所屬線程與UI線程的資源爭奪問題。
這里還將Runnable對(duì)象所屬的線程引用存儲(chǔ)了起來。由Thread.currentThread()可以獲得當(dāng)前的線程對(duì)象。
下面是代碼的具體實(shí)現(xiàn)方式:
class PhotoDecodeRunnable implements Runnable { .../** Defines the code to run for this task.*/@Overridepublic void run() {// Moves the current Thread into the backgroundandroid.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());...} ... }總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:线程执行操作之定义线程执行代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随笔-机器如何学习我们的知识?
- 下一篇: 致力语言资源建设、常识推理的自然语言处理