Android 2.2 フォンで奇妙な問題が発生しました。
ソケット接続を開きます。
socket = new Socket(serverAddr, SERVERPORT);
messageWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))));
messageReader = new InputStreamReader(socket.getInputStream(), Charset.forName("UTF-8"));
AsyncTask doInBackground() で読み始めます。
protected Boolean doInBackground(final Void... unused) {
...
char[] chars = new char[256];
int len;
while((len = messageReader.read(chars))>=0) {
builder.append(chars, 0, len);
break;
}
result = true;
...
}
読んだ後、接続を閉じます。
try {
socket.close();
socket = null;
} catch (Exception e) {Log.e("socket", "ex");}
try {
messageWriter.close();
messageWriter = null;
} catch (Exception e) {Log.e("writer", "ex");}
try {
messageReader.close();
messageReader = null;
} catch (Exception e) {Log.e("reader", "ex");}
Android 2.3 フォンと Android 4.0 エミュレーターではすべて正常に動作していますが、何らかの理由で Android 2.2 フォンでは動作しません。ソケットは閉じられ、ライターは閉じられますが、「socket.close();」を呼び出すときにループを停止する必要があるにもかかわらず、リーダーは while ループでスタックします...したがって、私の終了コードは「messageReader.close( );" UI全体がブロックされています!...そして、AsyncTask を強制終了する方法はありません...なぜこれが起こっているのですか?どうすればよいですか?