私のシナリオでは、次のコード(単純化)を実行するのonCreate()の活動方法である:のJava/Androidの - ハンドラ
dialog.show(); //loading wheel
try {
remote.sendRequest(myData, new MyHandler());
}
catch (Exception e) {
dialog.dismiss();
//log and react
}
class MyHandler extends SDKSpecificCompiledHandler {
@Override
public void failure() {
dialog.dismiss();
//do stuff
}
@override
public void success() {
dialog.dismiss();
//do stuff
}
}
//I have read-only access to this handler!
public abstract class SDKSpecificCompiledHandler {
public abstract void success(JSONObject successData);
public abstract void failure(JSONObject errorData);
}
説明:リモートサービスを渡すと呼ばれています彼が完了したときに呼び出されるハンドラです。ロードホイール(ダイアログ)は、成功、失敗、または例外が発生するまでユーザーに表示されます。
サービスが正常に呼び出されても応答が返されないという問題があります。その場合、dialog.dismiss()
は呼び出されず、ローディングホイールは永遠に回転し続けます。
私が必要とするのは、サーバーが戻ってこない場合に、数秒後にダイアログを閉じる(場合によっては他のアクションをとる)種類のタイムアウトです。
私は最初にサービスコール用の新しいスレッドを作成し、起動直後にダイアログを閉じるタイマーを設定しました。 いいアイデアでしょうか?
サービスは、サードパーティ/編集することはできません。
は、
EDIT、ありがとうございました。私はあらかじめコンパイルされたアーティファクトを使用しています。
なぜ、多くのアプリケーションでテストおよび検証、既存のHTTPライブラリを使用していませんか?それはタイムアウトを含むあなたのためのあらゆる種類のHTTP問題を処理します。とにかく、新しいスレッドを作成するのは良い考えではありません。とにかくネットワークコールはワーカースレッド上になければなりません。そのスレッドにハンドラをアタッチし、タイムアウトのケースを処理する遅延メッセージを投稿してください。あなたの呼び出しが遅延メッセージの前に返ってきた場合は、すべてのメッセージなどのハンドラをクリアしてください。 – vkislicins
Vkislincinsにお返事いただきありがとうございます。私が実際にサードパーティのSDKから呼び出しているので、編集ではリクエスト用のhttpライブラリを使用できません。あなたが提案したアプローチを使用するかもしれません。ありがとうございました。 – user2274307
okあなたが使用しているSDKとその 'remote'オブジェクトについてもっと詳しく投稿してください – vkislicins