你知道android的MessageQueue.IdleHandler吗?
16lz
2021-01-23
原文地址:https://wetest.qq.com/lab/view/352.html
第一点:android是基于Looper消息循环的系统
第二点:MessageQueue 中的IdleHandler接口
/** * Callback interface for discovering when a thread is going to block * waiting for more messages. */ public static interface IdleHandler { /** * Called when the message queue has run out of messages and will now * wait for more. Return true to keep your idle handler active, false * to have it removed. This may be called if there are still messages * pending in the queue, but they are all scheduled to be dispatched * after the current time. */ boolean queueIdle(); }
简而言之,就是在looper里面的message暂时处理完了,这个时候会回调这个接口,返回false,那么就会移除它,返回true就会在下次message处理完了的时候继续回调,
第三点: measure, layout, draw 这些view的绘制都类似于一个message 当所有的message 执行完毕
会暂时回调一次IdleHandler
第四点:处理问题1 当返回的数据处理逻辑特别复杂 耗时的情况下 可以把 数据处理放到IdleHandler 中
这样不会因为数据的复杂 影响view 的绘制
写法:
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { /*dosometing*/ return false; } });
第五点:处理问题 多次快速处理数据 只需要最后一次的结果(适用场景 单线程 + 异步)
btn_test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { threadHandler.post(new Runnable() { @Override public void run() { for (int i = 0; i < 5; i++){ try { Thread.sleep(1000); Log.d("ccccccc","第" + k + "个任务--》" + i + ""); } catch (InterruptedException e) { e.printStackTrace(); } } k++; } }); } }); handlerThread = new HandlerThread("test_thread"); handlerThread.start(); threadHandler = new Handler(handlerThread.getLooper()); MessageQueue messageQueue = handlerThread.getLooper().getQueue(); messageQueue.addIdleHandler(new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { return true; } });
多次post任务 当所有任务执行完毕 会回调对用的IdleHandler 返回true 会多次触发 如果返回false 则只会执行一次
更多相关文章
- android导出sqllist数据库要先配置adb.exe加到环境变量里
- Android:ListView数据异步加载、Handler、AsyncTask
- Android ListView组合CheckBox实现多选获取数据
- Android开发学习——android与服务器端数据交互
- android sqlite3 数据库升级,加字段
- android 读取json数据(遍历JSONObject和JSONArray
- Android listView FastScroll 快速查询数据
- 柱状图以及饼图进行数据统计
- android 升级数据库 修改表结构