为何线程未按预期运行?Android主线程网络异常问题
Android主线程网络异常问题解析
第一段代码报错原因
你调用clientSocket.start()确实启动了ClientSocket对应的线程,但**startConnection()和sendMessage()这两个核心网络操作,是直接在onCreate所在的主线程中同步执行的**,并没有被放到clientSocket线程的执行逻辑里。
Android明确禁止主线程执行耗时网络操作,否则会抛出android.os.NetworkOnMainThreadException。你这里只是启动了一个空线程,实际网络请求仍在主线程运行,自然触发异常。
第二段代码正常运行的原因
这段代码把startConnection()和sendMessage()封装到了新Thread的Lambda逻辑块(对应线程的run()方法)中,调用start()后,这个新线程会独立执行里面的网络操作,完全脱离主线程,符合Android的线程规范,因此不会触发异常。
核心误区说明
Thread.start()的作用是触发线程执行自身run()方法内的逻辑,并非“标记后续代码都在该线程执行”。- 必须将耗时操作(比如网络请求)放到线程的
run()方法(或Lambda代码块)内部,才能真正让子线程处理这些任务。
内容的提问来源于stack exchange,提问作者jungleparrot
相关产品推荐
相关产品推荐

