handlerThread 상세 설명

2874 단어
Thread 하위 스레드를 켜는 데 시간이 많이 소요됨
여러 차례 스레드를 창설하고 없애는 것은 시스템 자원을 매우 소모하는 것이다

하나.HanderThread가 뭐예요?


handler+thread+looper는thread 내부에looper가 있습니다
  • HandlerThread는 본질적으로 하나의 라인 클래스로 Thread를 계승한다.
  • HanderThread는 자신의 내부 Looper 대상이 있어 looper 순환을 할 수 있다
  • HanderThread의 looper 대상을 통해 Hander 대상에게 전달하고 HanderMessage에서 비동기 작업(하위 라인에서)
  • 막히지 않고 성능에 대한 소모를 줄이는 장점이 있고, 멀티태스킹을 동시에 할 수 없어 처리를 기다려야 하고 처리 효율이 낮다는 단점
  • 스레드 탱크가 병발을 중시하는 것과 달리 HanderThread는 하나의 직렬 대기열이고 HanderThread 뒤에는 하나의 스레드만 있다
  • 
    public class HandlerThreadActivity extends AppCompatActivity {
    
    
        private TextView mTvServiceInfo;
    
        private HandlerThread mCheckMsgThread;
    
        private Handler mCheckMsgHandler;
        private boolean isUpdateInfo;
    
        // UI handler
        private Handler mHandler = new Handler();
    
    
        private static final int MSG_UPDATE_INFO = 0x110;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_handler_thread);
    
    
            // 
            initBackThread();
    
            mTvServiceInfo = (TextView) findViewById(R.id.id_textview);
    
    
        }
    
    
    
        @Override
        protected void onResume() {
            super.onResume();
            // 
            isUpdateInfo = true;
            mCheckMsgHandler.sendEmptyMessage(MSG_UPDATE_INFO);// 
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            // 
            isUpdateInfo = false;
            mCheckMsgHandler.removeMessages(MSG_UPDATE_INFO);
    
        }
    
    
    
        private void initBackThread() {
    
            mCheckMsgThread = new HandlerThread("check-message");
            mCheckMsgThread.start();
            // looper  
            mCheckMsgHandler = new Handler(mCheckMsgThread.getLooper()) {
                @Override
                public void handleMessage(Message msg) {
    
                    checkForUpdate(); // 
                    if (isUpdateInfo) {
                        mCheckMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 1000);
                    }
                }
            };
    
        }
    
    
    
    
        /**
         *  
         */
        private void checkForUpdate() {
            try
            {
                // 
                Thread.sleep(1000);
                //ui  hander 
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
    
                        //Ui  
                        String result = " , :%d";
                        result = String.format(result, (int) (Math.random() * 3000 + 1000));
                        mTvServiceInfo.setText(Html.fromHtml(result));
                    }
                });
    
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
    
        }
    
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            // 
            mCheckMsgThread.quit();
        }
        
    
    }
    
    

    좋은 웹페이지 즐겨찾기