Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?
创始人
2024-04-27 21:58:45

在这里插入图片描述

经典回答

要讲清楚 Android 中的消息机制,肯定要先表述一下和 Handler 相关的一些类:

  • Message:消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息;
  • MessageQueue:消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next);
  • Handler:消息辅助类,主要功能向消息池发送各种消息事件(Handler.sendMessage)和处理相应消息事件(Handler.handleMessage);
  • Looper:不断循环执行(Looper.loop),按分发机制将消息分发给目标处理者。

Handler 相关类的代码量并不大,建议大家都去看一下,网上也有很多介绍和分析这些源码的文章,大家自己 Google 一下。大家把代码过了一遍后,会更加深对整个过程的理解,讲起来就从容多了。

实际开发中注意的地方。比如会问在一个工作线程中创建自己的消息队例应该怎么做?

其实就是想从侧面验证他是否正的了解,是否知道要调用Looper.prepare(在每个线程只允许执行一次)。

或者再问问是否用过HandlerThread,它有什么优缺点等。

注意:Handler可能会引起的内存泄露

在Activity中像这样创建一个Handler再正常不过了。

    private final Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {}};

但是,其实上面的代码可能导致内存泄露,当你使用Android lint工具的话,会得到这样的警告:

In Android, Handler classes should be static or leaks might occur,
Messages enqueued on the application thread’s MessageQueue also retain
their target Handler. If the Handler is an inner class, its outer
class will be retained as well. To avoid leaking the outer class,
declare the Handler as a static nested class with a WeakReference to
its outer class

有兴趣的可以细看一下这篇译文:《Android中Handler引起的内存泄露》

你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。

相关内容

热门资讯

忘不掉你的承诺诗歌 忘不掉你的承诺诗歌  当自己心中的那个他走了之后,  让人最难忘记的是“记忆”  因为,  那一段记...
你可曾读懂星星的眼睛诗歌 你可曾读懂星星的眼睛诗歌  成长脱去稚嫩的皮囊,  我们回归世俗的圈套。  梦外我们在拼搏向上,  ...
2021年歌颂端午节的小学生... 端午,作为中国文化和历史的代表,它不仅警示后人要时刻保持一份清廉正直的心,又让我们勿忘屈原,将他高尚...
母亲的爱的现代诗歌 母亲的爱的现代诗歌  在日常学习、工作和生活中,大家总少不了接触一些耳熟能详的诗歌吧,诗歌的内容是社...
汪国真诗集选 汪国真诗集选  汪国真的诗歌,在主题上积极向上、昂扬而又超脱。作品的一个特征经常是提出问题,而这问题...