返回介绍

在一個線程中執行一段特定的代碼

发布于 2020-04-01 13:16:51 字数 3808 浏览 936 评论 0 收藏 0

編寫:AllenZheng1991 - 原文:http://developer.android.com/training/multiple-threads/define-runnable.html

這一課向你展示瞭如何通過實現 Runnable接口得到一個能在重寫的Runnable.run()方法中執行一段代碼的單獨的線程。另外你可以傳遞一個Runnable對象到另一個對象,然後這個對象可以把它附加到一個線程,並執行它。一個或多個執行特定操作的Runnable對象有時也被稱為一個任務。

ThreadRunnable只是兩個基本的線程類,通過他們能發揮的作用有限,但是他們是強大的Android線程類的基礎類,例如Android中的HandlerThread, AsyncTaskIntentService都是以它們為基礎。ThreadRunnable同時也是ThreadPoolExecutor類的基礎。ThreadPoolExecutor類能自動管理線程和任務隊列,甚至可以並行執行多個線程。

定義一個實現Runnable接口的類

直接了當的方法是通過實現Runnable接口去定義一個線程類。例如:

public class PhotoDecodeRunnable implements Runnable {
    ...
    @Override
    public void run() {
        /*
         * 把你想要在線程中執行的代碼寫在這裡
         */
        ...
    }
    ...
}

實現run()方法

在一個類裡,Runnable.run() 包含執行了的代碼。通常在Runnable 中執行任何操作都是可以的,但需要記住的是,因為Runnable 不會在UI線程中運行,所以它不能直接更新UI對象,例如View 對象。為了與UI對象進行通信,你必須使用另一項技術,在與UI線程進行通信 這一課中我們會對其進行描述。

Runnable.run()方法的開始的地方通過調用參數為THREAD_PRIORITY_BACKGROUNDProcess.setThreadPriority()方法來設置線程使用的是後臺運行優先級。 這個方法減少了通過Runnable創建的線程和和UI線程之間的資源競爭。

你還應該通過在Runnable 自身中調用Thread.currentThread()來存儲一個引用到Runnable對象的線程。

下面這段代碼展示瞭如何創建run()方法:

class PhotoDecodeRunnable implements Runnable {
...
    /*
     * 定義要在這個任務中執行的代碼
     */
    @Override
    public void run() {
        // 把當前的線程變成後臺執行的線程
        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
        ...
        /*
         * 在PhotoTask實例中存儲當前線程,以至於這個實例能中斷這個線程
         */
        mPhotoTask.setImageDecodeThread(Thread.currentThread());
        ...
    }
...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文