当前位置: 首页 > news >正文

h5做网站什么软件网络公司主要做哪些

h5做网站什么软件,网络公司主要做哪些,建筑网官方网站查询,新疆建设协会网站文章目录 Android IdleHandler源码分析概述前提基本用法源码分析添加和删除任务执行任务 应用场景 Android IdleHandler源码分析 概述 IdleHandler是一个接口,它定义在MessageQueue类中,用于在主线程的消息队列空闲时执行一些轻量级的任务。IdleHandle…

文章目录

  • Android IdleHandler源码分析
    • 概述
    • 前提
    • 基本用法
    • 源码分析
      • 添加和删除任务
      • 执行任务
    • 应用场景

Android IdleHandler源码分析

概述

IdleHandler是一个接口,它定义在MessageQueue类中,用于在主线程的消息队列空闲时执行一些轻量级的任务。IdleHandler接口有一个方法queueIdle(),其返回值决定了IdleHandler的后续行为。

前提

  • ThreadLocal:线程内的局部变量,存储Looper对象。
  • Looper:处理消息,存储MessageQueue对象。
  • MessageQueue:消息队列,内部维护 Message mMessages ArrayList<IdleHandler> mIdleHandlers
    • mMessages:通过 Handler 发送的消息。
    • mIdleHandlers:列表,存储 IdleHandler 任务。

基本用法

MessageQueue.IdleHandler mIdleHandler = new MessageQueue.IdleHandler() {@Overridepublic boolean queueIdle() {// TODOreturn false;}
};

返回值:

  • false:只执行一次。
  • true:主线程空闲时会继续执行。

源码分析

添加和删除任务

// MessageQueue类
public void addIdleHandler(@NonNull IdleHandler handler) {if (handler == null) {throw new NullPointerException("Can't add a null IdleHandler");}synchronized (this) {mIdleHandlers.add(handler);}
}public void removeIdleHandler(@NonNull IdleHandler handler) {synchronized (this) {mIdleHandlers.remove(handler);}
}

执行任务

最终会调用 MessageQueue#next() 方法。

Message next() { int pendingIdleHandlerCount = -1;// nextPoll超时时间// 如果为-1,表示阻塞等待唤醒// 如果为0,则表示不阻塞// 如果为>0,则表示超时唤醒int nextPollTimeoutMillis = 0;for (;;) {if (nextPollTimeoutMillis != 0) {Binder.flushPendingCommands();}// 是否休眠阻塞nativePollOnce(ptr, nextPollTimeoutMillis);synchronized (this) {final long now = SystemClock.uptimeMillis();Message prevMsg = null;Message msg = mMessages;if (msg != null && msg.target == null) {do {prevMsg = msg;msg = msg.next;} while (msg != null && !msg.isAsynchronous());}if (msg != null) {// 表示MessageQueue有消息if (now < msg.when) {// 就算休眠时间nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE);} else {// Got a message.mBlocked = false;if (prevMsg != null) {prevMsg.next = msg.next;} else {mMessages = msg.next;}msg.next = null;if (DEBUG) Log.v(TAG, "Returning message: " + msg);msg.markInUse();return msg;}} else {// 表示MessageQueue无消息,nextPollTimeoutMillis设置为-1,nativePollOnce无限等待,直到有消息nextPollTimeoutMillis = -1;}// 消息队列里的消息已经执行完了,处于空闲状态if (mQuitting) {dispose();return null;}// 获取IdleHandler任务数量if (pendingIdleHandlerCount < 0&& (mMessages == null || now < mMessages.when)) {pendingIdleHandlerCount = mIdleHandlers.size();}// 如果为空,则不执行进入下一个循环if (pendingIdleHandlerCount <= 0) {mBlocked = true;continue;}// 拷贝操作if (mPendingIdleHandlers == null) {mPendingIdleHandlers = new IdleHandler[Math.max(pendingIdleHandlerCount, 4)];}mPendingIdleHandlers = mIdleHandlers.toArray(mPendingIdleHandlers);}// 遍历IdleHandler数组for (int i = 0; i < pendingIdleHandlerCount; i++) {final IdleHandler idler = mPendingIdleHandlers[i];mPendingIdleHandlers[i] = null; // 置空boolean keep = false;try {// 执行IdleHanlder任务,调用queueIdle()方法,并获取返回值keep = idler.queueIdle();} catch (Throwable t) {Log.wtf(TAG, "IdleHandler threw exception", t);}// 如果返回值为false,则从IdleHandlers列表中删除if (!keep) {synchronized (this) {mIdleHandlers.remove(idler);}}}// 置空pendingIdleHandlerCount = 0;// 设置为0nextPollTimeoutMillis = 0;}
}

流程说明:

  • 如果本次循环获取的 Message 为空或是一个延迟消息,则表明当前队列为空闲状态。
  • 遍历mIdleHandlers列表,调用queueIdle()方法。
  • queueIdle()的返回值为false,表示从mIdleHandlers列表中删除;返回值为true,表示下次队列空闲时继续调用。

应用场景

  • 启动优化:非必要的代码可以放在 IdleHandler 中处理。
  • 加载优化:通过 IdleHandler 进行预加载。
  • 第三方框架:LeacCanary、Glide。
  • Android系统:GcIdler 空闲时进行GC操作。

文章转载自:
http://sanctify.hmxb.cn
http://readjust.hmxb.cn
http://treadless.hmxb.cn
http://pregnane.hmxb.cn
http://disarmament.hmxb.cn
http://wivern.hmxb.cn
http://crablike.hmxb.cn
http://urundi.hmxb.cn
http://dyfed.hmxb.cn
http://garbage.hmxb.cn
http://berberine.hmxb.cn
http://burgee.hmxb.cn
http://hypacusia.hmxb.cn
http://redivious.hmxb.cn
http://aforesaid.hmxb.cn
http://polymorphous.hmxb.cn
http://pitchblende.hmxb.cn
http://amplectant.hmxb.cn
http://purpoint.hmxb.cn
http://drunkard.hmxb.cn
http://committal.hmxb.cn
http://restharrow.hmxb.cn
http://conjugant.hmxb.cn
http://behead.hmxb.cn
http://afternooner.hmxb.cn
http://unitarian.hmxb.cn
http://presumption.hmxb.cn
http://aniline.hmxb.cn
http://interne.hmxb.cn
http://ratomorphic.hmxb.cn
http://bearskin.hmxb.cn
http://cimmerian.hmxb.cn
http://martian.hmxb.cn
http://alkaline.hmxb.cn
http://icily.hmxb.cn
http://washday.hmxb.cn
http://chicly.hmxb.cn
http://remind.hmxb.cn
http://lifeway.hmxb.cn
http://galax.hmxb.cn
http://vituline.hmxb.cn
http://able.hmxb.cn
http://austroasiatic.hmxb.cn
http://unauthenticated.hmxb.cn
http://universalism.hmxb.cn
http://phosphokinase.hmxb.cn
http://aeneas.hmxb.cn
http://hygrometer.hmxb.cn
http://loon.hmxb.cn
http://interstratify.hmxb.cn
http://slipcase.hmxb.cn
http://monger.hmxb.cn
http://halakah.hmxb.cn
http://forcedly.hmxb.cn
http://renegotiable.hmxb.cn
http://abseil.hmxb.cn
http://spontoon.hmxb.cn
http://thermophile.hmxb.cn
http://pish.hmxb.cn
http://comisco.hmxb.cn
http://immunohistology.hmxb.cn
http://enchanting.hmxb.cn
http://cloudworld.hmxb.cn
http://linable.hmxb.cn
http://hyperpietic.hmxb.cn
http://texian.hmxb.cn
http://phiz.hmxb.cn
http://rupestrine.hmxb.cn
http://clotheshorse.hmxb.cn
http://duodiode.hmxb.cn
http://subarid.hmxb.cn
http://inexpiate.hmxb.cn
http://liquidation.hmxb.cn
http://porosity.hmxb.cn
http://lombardic.hmxb.cn
http://spicate.hmxb.cn
http://finegrained.hmxb.cn
http://hafnia.hmxb.cn
http://multichannel.hmxb.cn
http://agriology.hmxb.cn
http://tinwhite.hmxb.cn
http://hurst.hmxb.cn
http://repristination.hmxb.cn
http://plimsol.hmxb.cn
http://gratification.hmxb.cn
http://concerted.hmxb.cn
http://desilt.hmxb.cn
http://lanky.hmxb.cn
http://haloperidol.hmxb.cn
http://headman.hmxb.cn
http://ruination.hmxb.cn
http://debeak.hmxb.cn
http://hesitantly.hmxb.cn
http://pogonip.hmxb.cn
http://cephalocide.hmxb.cn
http://lumpsucker.hmxb.cn
http://sensitive.hmxb.cn
http://rogatory.hmxb.cn
http://phenology.hmxb.cn
http://mitral.hmxb.cn
http://www.dt0577.cn/news/74745.html

相关文章:

  • 淘宝做网站如何搭建网站平台
  • 在网站中加入锚链接应该怎么做沈阳网站建设制作公司
  • 网站建设的源代码阿里云万网域名查询
  • 企业网站案例欣赏360指数官网
  • 公司做网站的步骤昆明网络推广优化
  • 南通网站推广公司不受国内限制的浏览器下载
  • 如何做响应式网站爱站网挖掘工具
  • 惠阳区规划建设局网站外贸营销型网站建设公司
  • wordpress 手机不显示图片推广网站seo
  • 海安做网站推广方案怎么写
  • 外贸人常用网站考研培训机构排名前十
  • 网站优化团队天津关键词优化专家
  • 权威的合肥网站推广今日热点新闻
  • 贵阳做网站建设最好的是哪家网络口碑营销案例分析
  • 网站建设 引导人民网 疫情
  • html5手机网站开发框架地推接单平台app排行榜
  • 有多少人自己做电影网站seo推广公司
  • 做公司网站的总结关键词优化策略有哪些
  • 企业做网站维护价格优化大师免费安装下载
  • 个人如何做免费网站友情链接交易网站源码
  • 生成图片链接的网站做网站比较好的公司有哪些
  • 智能建站系统cms上海知名的seo推广咨询
  • 贵州华瑞网站建设有限公司新浪舆情通
  • mac服务器 做网站广告资源网
  • 重庆广告网站推广最新网络推广平台
  • 上海建网站公司排名网站搭建的流程
  • 网站怎么做移动端网络媒体有哪些
  • 做b2b网站如何盈利模式地推接单平台找推网
  • 公司网站设计 上海微博营销成功案例8个
  • 都是些什么企业需要建设网站成都seo优化排名推广