diff --git a/blogs/Android/Framework/Interview/线程通信相关/IdleHandler 原理.md b/blogs/Android/Framework/Interview/线程通信相关/IdleHandler 原理.md new file mode 100644 index 0000000..99508df --- /dev/null +++ b/blogs/Android/Framework/Interview/线程通信相关/IdleHandler 原理.md @@ -0,0 +1,87 @@ +--- +IdleHandler 原理 +--- + +1. 了解 IdleHandler 的作用以及调用方式 +2. 了解 IdleHandler 有哪些使用场景 +3. 熟悉 IdleHandler 的实现原理 + +```java +public static interface IdleHandler{ + boolean queueIdle(); +} +``` + +```java +Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler()){ + @Override + public boolean queueIdle(){ + return true; + } +} + +public void addIdleHandler(IdleHandler handler){ + synchronized(this){ + mIdleHandler.add(handler); + } +} +Message next(){ + for(;;){ + nativePollOnce(ptr, nextPollTimeoutMillis); + // 看消息列表是否有消息可以分发的,如果有,就返回该消息 + // 走到这说明没有消息可以分发,下一个 for 循环就要进入休眠了 + if(pendingIdleHandlerCount<0){ + pendingIdleHandlercount = mIdleHandlers.size(); + } + if(pendingIdleHandlerCount<0){ + continue; + } + mPendingIdleHandlers = mIdleHandlers.toArray(mPendingIdleHandlers); + for(int i=0;i