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

来源:7-3 主线程的 Looper 为什么不会导致应用 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回答

bennyhuo

2020-02-16

这个应该会anr,你理解的差不多

1
2
布鲁马3518274
回复
释然小师弟
那官方机型测试,别用国内机型。
2023-02-25
共2条回复

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程