我在onCreate方法中使用以下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(9002);
Socket s = serverSocket.accept();
DataOutputStream outputStream = new DataOutputStream(
s.getOutputStream());
BufferedReader inputStream = new BufferedReader(
new InputStreamReader(s.getInputStream()));
outputStream.write("Howdy! newbie".getBytes());
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread.run();
}
});
}
它给了我一个NetworkOnMainThreadException!
当我使用以下行删除限制时,它确实起作用:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
但是我为什么要使用它?
我使用了线程,为什么它不能在分离的线程上运行而在UI线程上运行?
改变
thread.run();
到
thread.start();
区别:
Thread.run()不会生成新线程,而Thread.start()会生成新线程,即
Thread.run
实际上在与调用者线程相同的线程上运行,而Thread.start()
创建一个在其上运行任务的新线程。
有关更多信息,请参见运行和启动线程之间的区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句