在Android開發(fā)中,如果我們要執(zhí)行某個耗時任務,一般都會考慮開啟一個線程去處理。
因為我們都知道一個線程run方法執(zhí)行完畢后,才算真正結束,但是,這只是結束,并沒有被回收,會一直閑置在那里,等待GC去回收,所以如果每執(zhí)行一個任務,我們都new一個線程,那么在某些極端的場景下,是比較消耗內存的。
之前的內存優(yōu)化的文章中,我講過關于android/223556.html">android中的池的概念,也就是復用的機制,那么對于線程也有個線程池。
這篇文章先簡單介紹下Android中自帶的四種線程池:
1 、newCachedThreadPool
這種線程池比較靈活,也就是說它的池里的線程數量并不是固定的,理論上可以無限大,任務不需要排隊,如果有空閑的線程,則復用,無則新建線程。
ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); cachedThreadPool.execute(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } });2、newFixedThreadPool
這個算是一個中規(guī)中矩,也是Android sdk的源碼中用的比較多的,它的池子里的線程數有個最大值,可以自己設置,如果超過這個最大值,那么任務就會加入任務隊列去等待。
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); fixedThreadPool.execute(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } });3、 newSingleThreadExecutor
如字面意思,這是一個單例化的線程池,他只有一個線程去執(zhí)行任務。最常見的一個例子就是我們的UI線程啦。它就是典型的單線程模型。
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); singleThreadExecutor.execute(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } });4、newScheduledThreadPool
這也是一個定長的線程池,但是可以支持周期性的任務。
以下例子表示延遲一秒過后,每兩秒執(zhí)行一次。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); scheduledThreadPool.scheduleAtFixedRate(new Runnable() { @Override public void run() { } },1, 2, TimeUnit.SECONDS);以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答
圖片精選