アプリにタイムアウト動作を実装しようとしています。また、タイムアウトが実際に発生する 5 秒前に警告 (アラート ダイアログ) が表示されるはずです。
そのために ScheduledExecutorService を使用したいと考えています。
これまでのところ、関連するコードは次のとおりです。
private final Context context = this;
private ScheduledExecutorService sExService = Executors.newScheduledThreadPool(2);
private RunnableScheduledFuture<?> sFutureTimeout;
private RunnableScheduledFuture<?> sFutureDisconnect;
private final Runnable timeoutRunnable = new Runnable(){
@Override
public void run() {
showTimeoutAlertDialog();
}
};
private final Runnable disconnectRunnable = new Runnable(){
@Override
public void run() {
disconnect();
}
};
およびタイムアウト動作を処理するメソッド:
private void setTimeout(){
sFutureTimeout = (RunnableScheduledFuture<?>) sExService.schedule(timeoutRunnable, 5, TimeUnit.SECONDS);
}
setTimeout は onCreate() で呼び出されるため、アプリは起動後 5 秒で切断されます。
private void showTimeoutAlertDialog(){
new AlertDialog.Builder(context)
.setTitle("Disconnect in 5s")
.setCancelable(false)
.setPositiveButton("Abort",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
sFutureDisconnect.cancel(false);
setTimeout();
}
}).show();
sFutureDisconnect = (RunnableScheduledFuture<?>) sExService.schedule(disconnectRunnable, 5, TimeUnit.SECONDS);
}
私が直面している問題は次のとおりです。
「setTimeout」で呼び出された runnable が「disconnectRunnable」に設定されている場合、正常に動作し、アプリは 5 秒後に切断されます。
「timeoutRunnable」に設定すると、alertDialog は表示されません + 「showTimeoutAlertDialog」で 5 秒後に「disconnectRunnable」を呼び出す必要がありますが、アプリは切断されません!?
ここで ScheduledExecutorService の何かがうまくいかなかったと思いますが、解決策が見つかりません。
ご協力ありがとうございました :)