该进程会启动主线程ActivityThread,也叫做UI主线程,但有时需要做些耗时操作,为了不能够去阻塞UI主线程的正常运行,我们将它放在子线程中进行操作,操作完成后需要绘制UI,但Android子线程不能直接操作UI线程的,所以通过Handler来进行通信 三、为什么Android子线程不能直接操作主线程? Android UI线程不是线程安全的,如果多线...
1. 首先我们不要弄混了消息等待阻塞(休眠)和消息处理阻塞,消息等待阻塞会导致主线程进入休眠,不会ANR,而消息处理阻塞会导致ANR。 2. 休眠不会阻碍主线程对新消息的感知和处理(有消息会被唤醒),但消息处理阻塞会,现在你们明白系统为什么要给主线程设置5秒的超时限制了吧。 3. 当没有消息时,queue.next()会阻塞...
另一种情况就是在子线程创建Handler,此时由于这个线程中没有默认开启的消息队列,所以我们需要手动调用looper.prepare(),并通过looper.loop开启消息 主线程Looper从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了...
第一个问题在Android的Handler机制详解2_native就回答了,MessageQueue.next()并没有一直在那里“傻转”它是通过调用nativePollOnce()这个navtive方法造成了阻塞,阻塞最终是通过epoll机制实现,每当我们向消息队列发送事件时,最终会间接向管道的“写入端”写入数据,于是epoll通过管道的“读取端”立即就感知到了风吹草动,ep...