Android Handler源码摘录[1]

sancaiodm Android源码摘录 2021-09-24 1273 0


private Handler mMainHandler; //声明

mMainHandler = new MainHandler(this, getMainLooper());//初始化
 
private static class MainHandler extends Handler {
        final WeakReference<CameraActivity> mActivity;

        public MainHandler(CameraActivity activity, Looper looper) {
            super(looper);
            mActivity = new WeakReference<CameraActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            CameraActivity activity = mActivity.get();
            if (activity == null) {
                
                return;
            }
            switch (msg.what) {
            
               // do somethings
            
            }
       }      
}

使用一:
    mMainHandler.post(new Runnable(){
       @Override
            public void run(){
                 // do somethings
            }
       });
               
使用二:        
  mMainHandler.removeMessages(MSG_XX);   //Remove meesage
  mMainHandler.sendEmptyMessageDelayed(MSG_XX, delayTimes);
  
使用三:  
  mMainHandler.removeCallbacks(mMyRunnable);     //Remove Callbacks runable
  mMainHandler.postDelayed(mMyRunnable, DELAY_MS);


回调方式


    final Handler mHandler;
    final Handler.Callback mCallback;
    private final Object mLock = new Object();
    
    mCallback = new MyCallback();
    mHandler = new Handler(context.getMainLooper(), mCallback);
    //方式二
    HandlerThread thread = new HandlerThread(TAG);
    thread.start();
    mHandler = new Handler(thread.getLooper(), mCallback);
     
    private final class MyCallback implements Handler.Callback {
        public static final int MSG_SET_STATE = 1;

        @Override
        public boolean handleMessage(Message message) {
            switch (message.what) {
                case MSG_SET_STATE: {
                    // See comment at mClient
                    final int state = message.arg1;
                     message.recycle();
                    synchronized (mLock) {
                        //do somethings
                    }
                } break;
            }
            return true;
        }
    }
    
    mHandler.obtainMessage(msg_code).sendToTarget();


评论