Android AsynTask 與Thread 或線程池 使用分析

做Android的都知道, AsynTask 就是google 給我提供的一個在另一個線程 執行任務的工具.
從某種層面上將 , 他就是實現了 java 裏面的Thread 的功能

但是經常在網上看到說, 推薦使用AsynTask 少用Thread
這是爲什麼? 

我也看了下 AsynTask 的源碼 其實挺簡單的,
裏面有兩個靜態的線程池, 
一個是同步線程池, 該線程最多可同時執行128個線程
一個是順序執行的線程, 只有上一個線程執行完畢才執行下一個線程, 

我們在使用AsynTask 的時候可以選擇不同的方式去執行 


new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... params) {
        return null;
    }
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);

public static final Executor THREAD_POOL_EXECUTOR
        = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
                TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

public static final Executor SERIAL_EXECUTOR = new SerialExecutor();


ok 基本明白了 AsynTask 的工作原理
那麼爲什麼推薦使用AsynTask呢?

原因有:
開闢線程是很費時間的, 所有用線程池會好一些

那爲什麼不自己整一個線程池呢?
其實也可以自己整一個線程池, 但是自己如果管理的不好也是會造成一些問題,
看過一些代碼, 在一些邏輯處理的類中, 都new 了一個線程池, 這個我們在執行線程的時候,看似是在使用線程池, 沒有單獨的new 線程, 但是new 了很多線程池 這個難免也 很耗性能


問了認識的大牛, 他們說他們公司規定 線程都用AsynTask , 不能自己new Thread 或new線程池
這樣是爲了在性能分析的時候方便一些, 他們之的代碼也是很多自己new的Thread 後面在做性能優化的時候
看多很多線程亂七八糟 ,後面都規定使用 AsynTask 就規範很多了

還有一點確實好, 那就是在使用AsynTask 確實不自己隨意的new Thread 節省一些性能


關於線程分析, 也向那位大牛學到了一些, 就是使用DDMS工具 



最後會生成這樣的線程數據: 



更深入的可以參考這邊文章:

關於AsynTask 更深入的分析可以參考下面文章:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章