文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android IdleHandler基本使用及应用案例详解

2022-11-13 18:14

关注

IdleHandler基本使用

IdleHandler原型

public static interface IdleHandler {
    boolean queueIdle();
}

不看源码直接上结论,Android应用的运行都是靠着一条条Message入队、出队、执行实现,当应用主线程的消息队列空闲的时候(消息队列没有消息或下一次消息执行的时间还未到),就会尝试去执行IdleHandler集合。

其中:IdleHandlerqueueIdle方法的返回值如果为false,那么IdleHandler执行完之后就会被移除,也就是说只会被执行一次;如果返回值为true,不会被移除且可以被执行多次。

所以我们就可以向消息队列的IdleHandler集合中插具体的IdleHandler在应用主线程空闲的时候执行一些操作,基本的使用如下:

Looper.getMainLooper().queue.addIdleHandler {
    true
}

案例1:执行GC

大家都知道,不能随便在主线程执行GC,否则很容易造成卡顿,但是我们可以在主线程空闲的时候去执行GC,这个时候就可以利用IdleHandler,Android源码中就有如下使用:

#ActivityThread
void scheduleGcIdler() {
    Looper.myQueue().addIdleHandler(mGcIdler);
}

final class GcIdler implements MessageQueue.IdleHandler {
    @Override
    public final boolean queueIdle() {
        doGcIfNeeded();
    }
}

void doGcIfNeeded(String reason) {
     //执行GC
     BinderInternal.forceGc(reason);
}

这样既可以满足gc回收对象的需要,又不会影响主线程中其他任务的执行

案例2:粗估Activity界面渲染时间

我们首先要明确界面渲染流程是发生在Activity的onResume生命周期,往主线程消息队列添加消息屏障(之后添加的Message只能执行异步类型的),然后发送界面渲染异步Message,等到界面渲染完成后才会从消息队列移除屏障消息,这个时候才能正常执行其他Message。

参考下滴滴的DoKit开源库:

我们现在onResume方法中记录界面开始渲染时间,添加一个IdleHandler,这个会在界面渲染相关Message执行完毕后再执行它,所以就可以简单的估算出界面渲染时长。

案例3:App大图监测

常见的大图监控方法都是将ImageView替换成自定义ImageView,然后重写设置图片的方法,比如setImageBitmap()等等,在方法中计算下图片的宽高是否超过ImageView的宽高,是就弹出一个弹窗提醒开发者,一般在Debug环境下执行这种检测。

Debug环境下开启大图检测,一般为了避免影响主线程其他任务执行,都会添加一个IdleHandler等主线程空闲了再去执行大图检测:

案例4:延迟启动初始化任务

一般我们都在ApplicationonCreate方法中执行任务(比如第三方SDK)的初始化,可是如果执行的初始化任务过多就会增加启动耗时,给用户带来较差体验。

而且有的任务并不是一定就需要在ApplicationonCreate就必须要执行,可以延迟初始化,减少应用启动耗时,这个时候就可以把相关延迟任务添加到一个Idlehandler中去执行。

到此这篇关于Android IdleHandler基本使用及应用案例详解的文章就介绍到这了,更多相关Android IdleHandler内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯