1

2 つのアクティビティを持つ Android アプリがあります。2 つのアクティビティの子で、関数内で無限forループを実行しrun()ます。

次の 2 つの条件のいずれかで、アクティビティが前のビューに戻るようにします。

  1. 現在のカレンダーの秒がHIGH_SEC(59)に達する
  2. ユーザーがBackボタンを押す

2 つのうちの 1 つ目は、次のコードによって満たされます。

Runnable mHideRunnable = new Runnable() {

    @Override
    public void run() {            
        for (;;) {
            Calendar cal = Calendar.getInstance();
            if (cal.get(Calendar.SECOND) == HIGH_SEC)
                break;
            System.out.println(cal.get(Calendar.SECOND));
            try {
                Thread.currentThread().sleep(1000);
            } catch (Exception e) {
            }
        }
        finish();
    }
};

現在、ユーザーがBackボタンを押すと、アプリがフリーズします。これは、アクティビティが無限forループに陥っているためだと思います。Backコードを適切に反応させるためにボタンをチェックする方法を知っている人はいますか?

4

2 に答える 2

1

onBackPressed()を使用できます

@Override
public void onBackPressed() {
    run = false;
}

ただし、通常の動作として予期されていないものには、戻るボタンを使用することはお勧めしません。おそらく、代わりに専用のUIボタンを作成する必要がありますか?

それを使用する代わりにfor(;;) {}、私見、使用するのがよりきれいですwhile(myBoolean) {}

編集:完全な例

private static volatile boolean run = true;

Runnable mHideRunnable = new Runnable() {

    @Override
    public void run() {            
        while (run) {
            Calendar cal = Calendar.getInstance();
            if (cal.get(Calendar.SECOND) == HIGH_SEC)
                break;
            System.out.println(cal.get(Calendar.SECOND));
            try {
                Thread.currentThread().sleep(1000);
            } catch (Exception e) {
            }
        }
        finish();
    }
};

@Override
public void onBackPressed() {
    run = false;
}
于 2013-03-12T07:51:56.607 に答える
0

これは、ボタンを押したイベントをキャプチャする方法です。必要に応じて(つまり、戻るボタンのイベントチェックに)使用できます。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Do whatever you want here.
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

それ以外の場合は、これを使用できます:-

@Override
public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   // Do your stuff
}
于 2013-03-12T07:51:55.000 に答える