W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫(xiě):AllenZheng1991 - 原文:http://developer.android.com/training/multiple-threads/define-runnable.html
這一課向你展示了如何通過(guò)實(shí)現(xiàn) Runnable接口得到一個(gè)能在重寫(xiě)的Runnable.run()
方法中執(zhí)行一段代碼的單獨(dú)的線程。另外你可以傳遞一個(gè)Runnable對(duì)象到另一個(gè)對(duì)象,然后這個(gè)對(duì)象可以把它附加到一個(gè)線程,并執(zhí)行它。一個(gè)或多個(gè)執(zhí)行特定操作的Runnable對(duì)象有時(shí)也被稱(chēng)為一個(gè)任務(wù)。
Thread和Runnable只是兩個(gè)基本的線程類(lèi),通過(guò)他們能發(fā)揮的作用有限,但是他們是強(qiáng)大的Android線程類(lèi)的基礎(chǔ)類(lèi),例如Android中的HandlerThread, AsyncTask和IntentService都是以它們?yōu)榛A(chǔ)。Thread和Runnable同時(shí)也是ThreadPoolExecutor類(lèi)的基礎(chǔ)。ThreadPoolExecutor類(lèi)能自動(dòng)管理線程和任務(wù)隊(duì)列,甚至可以并行執(zhí)行多個(gè)線程。
直接了當(dāng)?shù)姆椒ㄊ峭ㄟ^(guò)實(shí)現(xiàn)Runnable接口去定義一個(gè)線程類(lèi)。例如:
public class PhotoDecodeRunnable implements Runnable {
...
@Override
public void run() {
/*
* 把你想要在線程中執(zhí)行的代碼寫(xiě)在這里
*/
...
}
...
}
在一個(gè)類(lèi)里,Runnable.run()
包含執(zhí)行了的代碼。通常在Runnable 中執(zhí)行任何操作都是可以的,但需要記住的是,因?yàn)?a rel="external nofollow" target="_blank" target="_blank">Runnable 不會(huì)在UI線程中運(yùn)行,所以它不能直接更新UI對(duì)象,例如View 對(duì)象。為了與UI對(duì)象進(jìn)行通信,你必須使用另一項(xiàng)技術(shù),在與UI線程進(jìn)行通信 這一課中我們會(huì)對(duì)其進(jìn)行描述。
在Runnable.run())方法的開(kāi)始的地方通過(guò)調(diào)用參數(shù)為THREAD_PRIORITY_BACKGROUND 的Process.setThreadPriority()方法來(lái)設(shè)置線程使用的是后臺(tái)運(yùn)行優(yōu)先級(jí)。 這個(gè)方法減少了通過(guò)Runnable創(chuàng)建的線程和和UI線程之間的資源競(jìng)爭(zhēng)。
你還應(yīng)該通過(guò)在Runnable 自身中調(diào)用Thread.currentThread()來(lái)存儲(chǔ)一個(gè)引用到Runnable對(duì)象的線程。
下面這段代碼展示了如何創(chuàng)建run()方法:
class PhotoDecodeRunnable implements Runnable {
...
/*
* 定義要在這個(gè)任務(wù)中執(zhí)行的代碼
*/
@Override
public void run() {
// 把當(dāng)前的線程變成后臺(tái)執(zhí)行的線程
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
...
/*
* 在PhotoTask實(shí)例中存儲(chǔ)當(dāng)前線程,以至于這個(gè)實(shí)例能中斷這個(gè)線程
*/
mPhotoTask.setImageDecodeThread(Thread.currentThread());
...
}
...
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: