バックグラウンドスレッドの処理結果に応じてUIを変更する必要があるAndroidアプリを開発しています。最初に次のコードを試しました:
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に反映するのに最適な日はいつですか。