私にとっては、HTTP リクエストのタイムアウトが正常に機能していません。次のような非常に奇妙な問題がありました。
- 1000 ミリ秒のタイムアウトを設定すると、2 秒または 3 秒で呼び出されます。
- 2000 ミリ秒以上のタイムアウトを設定すると、呼び出されることはありません。
私は Android ICS と JB を使用していますが、両方で上記の問題が発生します。タイムアウト パラメータにバグがあるようです。
回避策として、onload 内でチェックを行っています (例: ファイルをダウンロードしている場合、ローカル ファイルのチェックサムとサーバー上の同じファイルのチェックサムを比較します)。 setTimeout. それは拡張して機能しています。
以下のコードは、JS の setTimeout コマンドを使用して、リクエストのタイムアウトをシミュレートする方法を示しています。
var downloadDataReq = Titanium.Network.createHTTPClient();
downloadDataReq.onload = function() {
clearTimeout(timeout);
alert('loaded');
}
downloadDataReq.onerror = function(e) {
clearTimeout(timeout);
alert('error: ' + e.error);
}
var urlToDownloadData = 'http://10.1.1.183/maquina_local/arquivos/FirefoxPortable_12.0_PortugueseBR.paf.exe';
downloadDataReq.open("GET", urlToDownloadData);
var timeout = setTimeout(function(){
downloadDataReq.onload = function(){
downloadDataReq.onerror({'error': 'timeout'});
};
downloadDataReq.abort();
}, 4000);
downloadDataReq.send();
タイムアウト時に、onload イベントを onerror イベントに変更しています。これは、実行中のリクエストを中止しようとすると、「onerror」ではなく「onload」イベントがトリガーされるためです。そうしないと、この問題によってファイルが破損する可能性があります (例: 20 MB のファイルで、リクエストが中止されると、ファイルは 20 MB 未満のサイズで不完全になります)。
私はまだこのソリューションをテストしていますが、少なくとも今のところ、いくつかのバグが解決されました。