V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  StrorageBox  ›  全部回复第 2 页 / 共 6 页
回复总数  106
1  2  3  4  5  6  
2022-11-14 12:05:19 +08:00
回复了 Saxton 创建的主题 职场话题 马斯克突然开除 80%推特合同工
这老新闻了,11 月 4 号就都裁完了,不知道会不会有利于华裔
2022-08-17 17:10:07 +08:00
回复了 qiubangzhu 创建的主题 macOS 请问 mac 上最好的本地音乐播放器
foobar 2000
2022-07-08 18:36:04 +08:00
回复了 StuPYX 创建的主题 职场话题 就业形势有感
看看最高赞就知道,这楼里坏 B 太多了,你还想讨论问题?问就是人多
我说句实话,我们小区招保安月薪 4000 ,年龄不限
2022-06-25 17:25:09 +08:00
回复了 wxlwsy 创建的主题 电动汽车 最近看新能源车有感
@Ne
@ttentau1
感谢,今天刚去 byd 店里,差点被洗脑了
加油
2022-06-21 13:40:55 +08:00
回复了 ElmerZhang 创建的主题 职场话题 你能接受平薪甚至降薪跳槽吗?
再送你个 dribbble,哈哈哈哈哈
2022-06-21 13:40:22 +08:00
回复了 ElmerZhang 创建的主题 职场话题 你能接受平薪甚至降薪跳槽吗?
你甚至连 double 都拼错了
2022-06-14 13:01:02 +08:00
回复了 catalysia 创建的主题 问与答 为什么国内不搞一个国家级的身份和推送系统呢
*你*的,想卖信息别带上别人,*了个*的,op 这种人不是*就是坏,*的就是你这种人
你随便买个云服务不比这香?
你是想说的 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 就能看到两种异步消息的添加方式了)。

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


那么问题来了,屏幕上的图像到底是谁绘制的?
2022-03-24 22:13:49 +08:00
回复了 amiwrong123 创建的主题 Android 自己编译 Android 源码烧写到手机里,需要做什么准备工作?
如何自己编译一个 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 编译的问题,等等。
这是一个恐怖故事
2022-02-11 22:22:01 +08:00
回复了 williamjing 创建的主题 算法 算法问题,大神进!
典型 bitmap 问题啊
2022-02-05 14:48:08 +08:00
回复了 neteroster 创建的主题 NAS 是否存在这样一种设备 / 方案(自建小型 NAS?)
华硕有一款可以装固态的路由器,同你的要求完美匹配
1  2  3  4  5  6  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2842 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 12:54 · PVG 20:54 · LAX 04:54 · JFK 07:54
Developed with CodeLauncher
♥ Do have faith in what you're doing.