タイムアウトをサポートする ksoap2 2.5.4 (Android 2.2 上) を使用しています。リクエストを処理するために Apache 2.2.16 を使用しています。すべて正常に動作しますが、Apache をシャットダウン (または Apache が実行されているリモート PC を切断) しても、通話がタイムアウトすることはありません。別のスレッドを使用して WS を呼び出していますが、このスレッドはこの場合、約 2 分間動作/応答/ストールを停止します。
int MSG_TIMEOUT = 15000;
HttpTransportSE httpTransport;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
httpTransport = new HttpTransportSE(URL, MSG_TIMEOUT);
httpTransport.debug = true;
httpTransport.call(SOAP_ACTION, envelope);//thread stops responding here
Timer を使用して、定義済みのタイムアウト後にそのスレッドをキャンセルしようとしましたが、機能しませんでした。スレッドはまだ存在し、2 分間待機しています。
TimerTask task;
Timer mTimer;
task = new TimerTask() {
public void run() {
mThread.interrupt();
}
};
mTimer = new Timer();
mTimer.schedule(task, MSG_TIMEOUT);
それと関係があるかもしれないこの警告も表示されます(どうすればよいかわかりません):
Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.ksoap2.transport.KeepAliveHttpsTransportSE$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
KSOAP を機能させるか、定義済みのタイムアウト後にそのスレッドを中断するようにタイマーを改善する機会はありますか? 答えてくれてありがとう、または何を試してみるか!