Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> HandlerThread 創建一個異步的後台線程,handlerthread異步

HandlerThread 創建一個異步的後台線程,handlerthread異步

編輯:關於android開發

HandlerThread 創建一個異步的後台線程,handlerthread異步


使用HandlerThread幾大優點:

1、制作一個後台異步線程,需要的時候就可以丟一個任務給它,使用比較靈活;

2、Android系統提供的,使用簡單方便,內部自己封裝了Looper+Handler機制;

3、可以代替Thread + Looper + Handler的寫法;

4、可以避免項目中隨處可見的 new Thread().start(),增加系統開銷;

 

使用HandlerThread注意:

1、不要執行太耗時(一般情況不要超過100ms級別的)的任務,如果太耗時可能會阻塞其他的任務,使得其他任務遲遲得不到執行的結果

2、要自己控制好合適的生命周期,啟動和結束都要自己控制

 

使用HandlerThread封裝一個一定生命周期內的後台線程

使用場景:

有一個相對比較大的功能,主界面是一個Activity,在這個Activity內有很多的交互,不同的界面可能會加載不同是數據

源碼封裝:

源碼中使用HandlerThread的Handler的post的方式,沒有使用Handler的sendMessage(message)的方式,使用post的方式比較簡單,代碼少,其實post內部也是調用了sendMessage的方式的

/**
 * 需要自己控制生命周期,在這個生命周期內都可以使用這個線程
 *
 */
public class BackgroundThread extends HandlerThread {
    private static BackgroundThread mInstance;
    private static Handler mHandler;

    public BackgroundThread() {
        super("ThreadName", android.os.Process.THREAD_PRIORITY_DEFAULT);
    }

    public static void prepareThread() {
        if (mInstance == null) {
            mInstance = new BackgroundThread();
            // 創建HandlerThread後一定要記得start()
            mInstance.start();
            // 獲取HandlerThread的Looper,創建Handler,通過Looper初始化
            mHandler = new Handler(mInstance.getLooper());
        }
    }

    /**
     * 如果需要在後台線程做一件事情,那麼直接調用post方法,使用非常方便
     */
    public static void post(final Runnable runnable) {
        mHandler.post(runnable);
    }

    public static void postDelayed(final Runnable runnable, long nDelay) {
        mHandler.postDelayed(runnable, nDelay);
    }

    /**
     * 退出HandlerThread
     */
    public static void destroyThread() {
        if (mInstance != null) {
            mInstance.quit();
            mInstance = null;
            mHandler = null;
        }
    }
}

BackgroundThread使用案例:

1、在Activity的onCreate中執行HandlerThread初始化和啟動操作

BackgroundThread.prepareThread();

 

2、在Activity的onDestroy中執行HandlerThread的銷毀操作

BackgroundThread.destroyThread();

 

3、在BackgroudThread的生命周期內,任何地方都可以調用post或者postDelayed方法給線程丟一個任務

BackgroundThread.post(new Runnable() {
            @Override
    public void run() {
        // 執行耗時操作(這裡就是同步操作)
        // 執行完成得到結果
        // 對結果進行處理,如果需要操作UI,得使用主線程的Handler拋到主線程執行(或者其他的方式)
    }
});

 

擴展閱讀:

HandlerThread之Handler的sendMessage方法:

 

 

HandlerThread的Handler的post方法源碼內部調用:

  

 

Android HandlerThread 完全解析

http://blog.csdn.net/lmj623565791/article/details/47079737/

Android Thread Looper Handler 關系

http://blog.csdn.net/elfylin/article/details/6085042

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved