[英]Why does my thread not do what i think it does?(Android internet over main thread issue)
我對 android 應用程序中的 android 主線程有疑問。 所以當我執行第一塊代碼時,我得到了錯誤: android.os.NetworkOnMainThreadException 。 而且我不明白為什么,我正在啟動線程以及在線程啟動時執行任務。 為什么應用程序仍然在主線程上運行? 為什么第一個塊下面的代碼會起作用?
public class MainActivity extends AppCompatActivity {
ClientSocket clientSocket = new ClientSocket();
@Override
protected void onCreate(Bundle savedInstanceState) {
clientSocket.start();
try {
clientSocket.startConnection("192.168.2.5", 45032);
clientSocket.sendMessage("test");
} catch (IOException e) {
e.printStackTrace();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
什么最終起作用:
public class MainActivity extends AppCompatActivity {
ClientSocket clientSocket = new ClientSocket();
@Override
protected void onCreate(Bundle savedInstanceState) {
new Thread(() -> {
try {
clientSocket.startConnection("192.168.2.5", 45032);
clientSocket.sendMessage("test");
} catch (IOException e) {
e.printStackTrace();
}
}).start();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
正如您已經指出的那樣,在單獨的線程中打開套接字連接可以解決問題!
您在onCreate()
方法中直接執行的所有內容都將在主線程上運行。 一般來說,您不應該在主線程上執行網絡任務,因為這可能會對您的應用程序的響應能力產生重大影響,尤其是在互聯網連接不良的地區。
因此,在單獨的線程中建立連接是正確的做法!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.