Android線程管理(非線程池)

最近的項目中有用到很多在線程中請求服務(wù)器的耗時操作,但是沒有大量的高并發(fā)操作,因此不打算使用線程池,但是
每次都做請求服務(wù)器的耗時操作時,都會new Thread,這樣做可能會損耗性能,也可能會產(chǎn)生其他原因。因此打算使用封裝一個線程管理的類,統(tǒng)一管理線程,方便維護(hù)。

  public class ThreadManager {
          /** 主線程 */
         public static final int THREAD_UI = 0;
         /** background線程,用于一般的耗時操作 */
         public static final int THREAD_BACKGROUND = 1;
         /** data線程,用于數(shù)據(jù)庫操作 */
         public static final int THREAD_DATA = 2;
         private static final int THREAD_SIZE = 3;
        /** 線程信息數(shù)組 */
        private static final Handler[] HANDLER_LIST = new Handler[THREAD_SIZE];
        private static final String[] THREAD_NAME_LIST = {
                         "thread_ui",
                          "thread_background",
                          "thread_data"
         };
        private ThreadManager() {
                   HANDLER_LIST[THREAD_UI] = new Handler();
          }
        private static class ThreadManagerHolder {
                   private static ThreadManager sManager = new ThreadManager();
         }
        public static ThreadManager getManager() {
                  return ThreadManagerHolder.sManager;
        }
       /**
       * 派發(fā)任務(wù)
       *
       * @param index 線程類型
       */
       public void post(int index, Runnable r) {
                   postDelayed(index, r, 0);
        }
       /**
         * 延遲派發(fā)任務(wù)
         *
         * @param index 線程類型
         */
         public void postDelayed(int index, Runnable r, long delayMillis) {
                       Handler handler = getHandler(index);
                       handler.postDelayed(r, delayMillis);
          }
         /**
           * 刪除任務(wù)
           *
           * @param index 線程類型
           */
          public void removeCallbacks(int index, Runnable r) {
                         Handler handler = getHandler(index);
                         handler.removeCallbacks(r);
          }
          /**
            * 獲取線程Handler
            *
            * @param index 線程類型
            */
            public Handler getHandler(int index) {
                      if (index < 0 || index >= THREAD_SIZE) {
                       throw new InvalidParameterException();
                       }
                      if (HANDLER_LIST[index] == null) {
                                synchronized (HANDLER_LIST) {
                                           if (HANDLER_LIST[index] == null) {   
                                                    HandlerThread thread = new HandlerThread(THREAD_NAME_LIST[index]);
                                                    if (index != THREAD_UI) {
                                                    //優(yōu)先級要低于主線程
                                                    thread.setPriority(Thread.MIN_PRIORITY);
                                                     }
                                                     thread.start();
                                                     Handler handler = new Handler(thread.getLooper());
                                                     HANDLER_LIST[index] = handler;
                                         }
                              }
                    }
            return HANDLER_LIST[index];
           }
         /**
           * 判斷是否運(yùn)行在當(dāng)前線程
           *
           * @param index 線程類型
           * @return true yes
           */
           public boolean runningOnCurrent(int index) {
                      return getHandler(index).getLooper() == Looper.myLooper();
             }
     }

使用方法

          ThreadManager.getManager.post(ThreadManager.THREAD_BACKGROUND,new Runable(){
                        @override
                        public void run(){
                            //TODO
                          } 
               });

原文鏈接:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0703/8147.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容