我開發一個Android應用程序,需要根據後臺線程的處理結果做出UI的變化,我想下面的代碼在第一次:變化的Android UI導致
Thread run_time = new Thread(){
public void run(){
ConnectToServer connect = new ConnectToServer(null);
while(true){
String server_response = connect.getServerResponse();
if(!server_response.equals(null)){
setResponse(server_response);
response_received();
}
}
}
};
run_time.start();
但我的應用程序崩潰,因爲我試圖使UI從後臺線程變化,然後我嘗試這種方式:
runOnUiThread(new Runnable() {
public void run(){
ConnectToServer connect = new ConnectToServer(null);
while(true){
String server_response = connect.getServerResponse();
if(!server_response.equals(null)){
setResponse(server_response);
response_received();
}
}
}
});
,但我得到這個異常:
01-29 16:42:17.045: ERROR/AndroidRuntime(605): android.os.NetworkOnMainThreadException
01-29 16:42:17.045: ERROR/AndroidRuntime(605): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
01-29 16:42:17.045: ERROR/AndroidRuntime(605): at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:151)
01-29 16:42:17.045: ERROR/AndroidRuntime(605): at libcore.io.IoBridge.recvfrom(IoBridge.java:503)
01-29 16:42:17.045: ERROR/AndroidRuntime(605): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
01-29 16:42:17.045: ERROR/AndroidRuntime(605): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
和搜索後,我發現,我必須運行代碼AsyncTask
避免這些問題,但嘗試使用它時,我發現,它必須用小任務只能使用不一樣的是,在運行的線程背景全部run_time。
那麼,什麼是運行一個線程或在整個RUN_TIME後臺任務,也是反映其變化的UI最好的一天。
僅移動[runOnUiThread] [1]中改變UI的部分。 [1]:http://stackoverflow.com/questions/11140285/how-to-use-runonuithread – h22
檢查我的答案對如何做好網絡的一些信息。 –