标签:面试清除筛选

Handler 运行流程源码解析(八):为什么主线程的 Looper 死循环不会卡死应用(ANR)

主线程最终进入 Looper.loop ,正常运行时这个方法不会返回。既然线程一直停留在循环中,Activity 生命周期、点击事件和界面刷新为什么还能执行? 关键在于:这些工作本来就由事件循环驱动。 主线程不需要先退出 loop 才能执行回调;回调就在循环处理事件的过程中被调用。空闲时,循环又会进入可唤醒的阻塞等待,避免持续空转。 一、先区分无限循环、忙等、死锁和 ANR 几个词经常被混用

Handler 运行流程源码解析(七):Handler 中的 Message 创建

本文内容整理自技术讲解视频《Handler 中的 Message 如何创建?》。 创建 Handler 消息时,new Message 可以工作,但通常应使用 Message.obtain 或 handler.obtainMessage 。它们会优先复用已经回收的 Message,池为空时才分配新对象。 一、先把创建方式用对 如果消息要发送给一个已知 Handler,可以直接从它取得消息

Handler 运行流程源码解析(三):从引用链看 Handler 内存泄漏

本文内容整理自享学团队直播课《Handler 运行流程源码解析(三)》 一、先说结论:Handler 本身不会自动导致内存泄漏 “Handler 为什么会导致内存泄漏?”这个问题,常见回答是“生命周期不一致”或“内部类持有外部类”。这两句话都触及了现象,却没有解释完整。 真正决定对象能否被回收的,是它是否仍能从 GC Root 到达。以 Activity 中的非静态内部类 Handler 为例,只

Handler 运行流程源码解析(二):一个线程有几个 Handler 和几个 Looper?

本文内容整理自享学团队直播课《Handler 运行流程源码解析(二)》 一、一个线程只有一个 Handler? "一个线程有几个 Handler、几个 Looper"这个问题,最常见的答法是两个都答 1。前半个答案是错的,而且很容易当场验证:在一个 Activity 里 new Handler(Looper.getMainLooper ),在同一个 App 的 Service 里再 new 一个

Handler 运行流程源码解析:从 sendMessage 到 handleMessage 的完整链路

本文内容整理自技术讲解视频《handler 运行的整个流程源码解析》。 主线程里有一个 for (;;) 死循环,从应用启动一直转到进程结束,应用却不卡。死循环与不卡顿为什么能同时成立? 原因可以总结为:send 系列方法把消息交给 Handler.enqueueMessage,消息带着一个执行时刻 when 被插进 MessageQueue 的单向链表(按 when 升序,所以它是优先级队列而不

Binder(七):四大组件底层的通信机制:bindService 的跨进程链路

一、面试题:广播如何跨进程 1.1 题目的真实问法 听上去在考 BroadcastReceiver,实际问的是四大组件的底层通信机制——广播只是四个组件里被挑出来的那一个,换成 Activity 启动、bindService、ContentProvider 查询,答案的骨架完全一样。 只回答「广播走 Binder」拿不到分。面试官想听的是这条链路上有哪几站、每一站由谁完成、哪几步跨了进程。 1.2

Binder(六):AIDL 生成的 Java 类细节:接口、Stub 与 Proxy

一、面试题:AIDL 生成的 Java 类细节 1.1 题目背景 这道题问的是编译产物:写完 .aidl 文件点一下构建,生成的那个 Java 文件里到底有什么。不少人做过跨进程需求,却从没打开过 build/generated 目录下的那份代码,回答就只能停在「AIDL 用来跨进程」这一层。 1.2 AIDL 是什么 AIDL(Android Interface Definition Langu

Binder(五):Binder 机制是如何跨进程的,一次拷贝的完整链路

一、面试题:Binder 机制是如何跨进程的 1.1 题目的本质 这道题没有新知识点。Binder 的三层定义、只拷贝一次的优势、mmap 的原理,前面几讲拆开讲过,这道题要的是把它们串成一条从发送方到接收方的链路,一口气讲完。 答不好的人通常不是不懂 mmap,而是零散地知道几个名词,说不清数据具体经过了哪几站、每一站发生了什么。 1.2 一个原理,多种问法 字节、腾讯这类公司问得细,往往从「B
上一页1/ 2下一页