Как нажимать другие кнопки, пока поток спит

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я нажимаю кнопку в своем приложении, это приложение остается нажатым, и я не могу нажимать какие-либо другие кнопки, например, чтобы остановить поток.

Прямо сейчас приложение просто мигает светом камеры (стробоскопом) и использует Thread.sleep(int) в ожидании следующей вспышки.

Могу ли я в любом случае запустить эту простую операцию в другом потоке или включить другие кнопки?

Спасибо!

РЕДАКТИРОВАТЬ: (Вот как это выглядит в try catch с новым исполняемым потоком, try catch выдает ошибку)

        try{
            cam = Camera.open();
            Parameters p = cam.getParameters();
            p.setFlashMode(Parameters.FLASH_MODE_TORCH);
            cam.setParameters(p);
            cam.startPreview();

            new Thread(new Runnable() {
                public void run() {
                        Thread.sleep(on);
                }
            }).start();

            camIsOn = true;
        } catch(InterruptedException ie){}

person Pythagoras    schedule 27.01.2014    source источник


Ответы (1)


Могу ли я в любом случае запустить эту простую операцию в другом потоке или включить другие кнопки?

Да, не звоните Thread.sleep() на UI Thread, иначе UI Thread будет спать, и вы не сможете все это время делать какие-либо UI вещи. Что-то типа

new Thread(new Runnable() {
    public void run() {
            // do stuff that doesn't touch the UI here
    }
}).start();

код заимствован у Mr. Мерфи здесь

Вы также можете прочитать документацию здесь.

person codeMagic    schedule 27.01.2014
comment
Я реализовал это в своем коде, однако блок try catch теперь выдает ошибку. Я добавил код выше, и ошибка Unreachable catch block для прерванного исключения. Еще раз спасибо за эту проблему. - person Pythagoras; 27.01.2014
comment
Это ужасно, но как я могу помочь, если я не знаю, в чем ошибка? Кроме того, не могли бы вы отредактировать свой пост и добавить код? Это значительно облегчает чтение. Честно говоря, обычно я даже не смотрю на код в комментарии. - person codeMagic; 27.01.2014
comment
on — целое число, представляющее миллисекунды, в течение которых горит свет - person Pythagoras; 27.01.2014
comment
sleep() получает long, а не int. см. документацию. И вы так и не сказали, что это за ошибка... - person codeMagic; 27.01.2014
comment
Я решил эту проблему, я добавил try catch в Runnable, спасибо - person Pythagoras; 27.01.2014