V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  StrorageBox  ›  全部回复第 1 页 / 共 4 页
回复总数  73
1  2  3  4  
你随便买个云服务不比这香?
你是想说的 block 机制吧


looper.loop()方法中开始循环调用 loopOnce()方法
loopOnce()调用,messageQueue.next()方法,这方法是会被 block 的。

- block 的原因呢
有两种,其 1 是消息队列是空的,其 2 是开启了同步屏障,而消息队列中没有异步消息。

- 解除 block 的原理也是这样,在 messageQueue.enqueueMessage() 中 1.添加新消息,2.添加异步消息(异步消息有两种添加方式,你可以从源码去了解一下)

- 解除 block 的方法或者叫唤醒的方法,走 native wake(),本质上呢是通过 pipe 向指定 fd 进行写入一个 char(代码在 native Looper 中 ,同时可以了解一下 pipe 的原理)

- 写入之后发生了什么,在 messageQueue.next()中首先调用 nativePollOnce()进入到 native Looper.poll_once(),进入到 native Looper.poll_inner() ,里面就能看到通过 epoll 去监听 fd 了(除了上面的指定 fd ,还含有多个 request 对应的 fd),如果有写入,就会有监听结果返回,Done 之后,block 便解除了。

这个过程细节很多,感兴趣可以了解一下 epoll ,select/poll ,requst/response queue ,native handler 。

结果就是,在 block 的时候,其实是有 epoll 去监听的。wake 之后就继续执行了。无限循环是为了保证线程不被结束,和 anr 是没有关系的。

谈到 anr ,还是要重新理解一下概念。anr 发生的根本原因,不是线程什么都不做,而是 dispatchMessage()的执行时间,确切的说是上一个 message 的 disptch 时间过长导致现在的 message 不能被及时处理。

我们看看 google 的定义"ANR 是一个问题,因为负责更新界面的应用主线程无法处理用户输入事件或绘制操作,引起用户的不满"。我觉得这个定义虽然没有把所有发生 anr 的情况罗列出来,但是很好的表达了 anr 的目的。

回到你的描述上,为什么不卡屏幕刷新。作为应用程序的屏幕刷新时机有两种,1.requestlayout 刷新,2.重绘刷新,这两种刷新的原理都是通过 Choreographer 发送异步消息(在 Choreographer 就能看到两种异步消息的添加方式了)。

纯手打,可能有些函数名有点出入。


那么问题来了,屏幕上的图像到底是谁绘制的?
如何自己编译一个 rom?

你需要准备
1. 类 unix 系统的主机(作为编译服务器,推荐 ubuntu)。
2. 一部已经被支持 LineageOS 的手机,相对于 google 亲儿子,这种也许更便宜(不过坑也更多,上面有人说的 pixel3 是个好主意)。
3. 可能需要一部能解锁 bootloader 、fastboot 的 win pc 。

编译 rom
针对你手机不同的支持,可以选择不同 asop 分支的代码,在此就以 LineageOS 的源码为例
1. 在编译服务器中,使用 repo 来初始化 asop 仓库。repo 是 Android 中专门管理多组 git 的工具,很方便。
2. 同样还是使用 repo ,切换成指定分支,如 stage 等
3. lunch 指定不同的编译架构,因为编译服务器的架构必定与手机的架构不同,这里使用要制定交叉编译的具体版本和一些其他参数
4. make

如果都齐备了,开始
1. 首先将你的手机解锁,刷入第三方 Recovery ,推荐 TWRP 。
2. 然后就可以刷入编译好的 rom 了。

如上只是粗略的步骤,里面还有不少坑,比如 mac 编译的问题,等等。
这是一个恐怖故事
106 天前
回复了 williamjing 创建的主题 算法 算法问题,大神进!
典型 bitmap 问题啊
华硕有一款可以装固态的路由器,同你的要求完美匹配
123 天前
回复了 Borch 创建的主题 职场话题 folezhang 关于声讨加班事件的说明(部分)
@hhyvs111 你这话真恶心,他做的很好,这就够了。富二代扶老人就不是正能量了?就不值得普通人学习了?
125 天前
回复了 Suonna 创建的主题 阅读 于迫书荒,求推荐一些小说 :)
最初进化
我习惯多带两根,总有同事出差忘带线😂
150 天前
回复了 helee9199 创建的主题 MacBook Pro 苹果为啥不干脆把摄像头拿掉呢
有一说一开视频会议还是挺有用的
199 天前
回复了 Johndo3 创建的主题 问与答 请问大家有什么戒烟解决方案?
这本书能让你戒烟,看第一页的时候我手里还有一半没抽完,第一章没看完就掐了,从此再也没抽过
261 天前
回复了 CSGO 创建的主题 问与答 杭州电信宽带续费有无优惠续费通道?
如果你是单宽带,在电信网站上,能找到活动入口,就是叫, 单宽带续费,我前两天刚续完,各省情况可能不同
261 天前
回复了 BaseException 创建的主题 职场话题 发工资了,又陷入了深深的焦虑
@signalyc 草率了
1  2  3  4  
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2642 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 36ms · UTC 09:20 · PVG 17:20 · LAX 02:20 · JFK 05:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.