0

アプリにタイムアウト動作を実装しようとしています。また、タイムアウトが実際に発生する 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 の何かがうまくいかなかったと思いますが、解決策が見つかりません。

ご協力ありがとうございました :)

4

1 に答える 1