主线程阻塞了,为啥运行没有报错?

来源:8-5 主线程进入loop循环了为什么没有ANR?

AndroidHunter

2020-02-16

老师您好,这里主线程阻塞了,为啥运行没有报错?

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final CountDownLatch latch = new CountDownLatch(1); // 声明计数器
        Thread t = new Thread() {
            public void run() {
                try {
                    sleep(1000 * 6);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                latch.countDown(); // 计数器减1
            }
        };
        t.start();

        try {
            // 主线程阻塞了,为啥运行没有报错?
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

}

我认为上面这种阻塞属于性能问题,不属于异常问题,只是会让界面显示延迟。
是否可以这样理解:
开发中是可以让主线程阻塞的(哪怕阻塞十几秒),只要别导致事件不能响应就行。

写回答

1回答

风语

2020-02-19

嗯,对的,只要别耽误事件响应比如说启动Activity,接收广播,按钮事件处理就没问题,因为这些事件在触发的时候AMS会启动超时检查的。

1
1
AndroidHunter
非常感谢!
2020-02-19
共1条回复

剖析Framework面试 冲击Android高级职位

一手助力冲刺Android高级职位,一手把握系统底层原理,理清面试思路,提升技术段位

1406 学习 · 187 问题

查看课程