2016-07-12 3 views
0

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

Почти в каждом ответе они сказали, что вы должны иметь запущенный цикл в методе run() (который у меня есть), и когда вы хотите, чтобы убить ваш Thread вы только должны установить boolean состояние while() в false. Я это понимаю, но в моем случае каждая итерация занимает много секунд, потому что это связано с GUI Thread. В принципе, этот thread ждет, пока пользователь нажмет кнопку, а затем он сделает больше вещей, например, воспроизводя некоторые звуки.

Так что моя проблема в том, что подмигнули невозможно остановить thread установки boolean в false, потому что он ждет пользователя, поэтому, когда пользователь нажимает на кнопку домой в Thread продолжает свое выполнение, (ожидая весовую ввод), а через несколько секунд (когда пользователь нажимает кнопку, истекло) воспроизводит звук.

Есть ли другой способ убить thread в методе onStop или что-то в этом роде?

Заранее спасибо.

+0

Не зная андроид, я бы сказал, что на самом деле это должно быть возможно, что при обнаружении событие пользователя с помощью кнопки «домой», вы убиваете поток. Если вы не можете напрямую убить поток, по крайней мере, вы должны иметь возможность выполнить ping класс (шаблон наблюдателя), в котором метод ожидает ввода пользователя, и изменить переменную, указав, что пользователь перемещается. (Сохраняйте логическое или что-то, что неверно, когда поток больше не запускается). Но я не знаком с потоками android, чтобы сказать, насколько это возможно или даже разумно :-) –

+0

Возможно, вам стоит проверить это условие цикла не один раз, а, возможно, до/после каждого из этих трудоемких шагов ?! – GhostCat

+0

Можете ли вы объяснить, почему вы используете поток, чтобы ждать события нажатия кнопки, а не просто устанавливать onClickListener() на кнопку? – Egor

ответ

0
@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   
} 

Тогда следующее событие уволю для кнопки домой пресс:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {  

    if(keyCode == KeyEvent.KEYCODE_HOME) 
    { 
     //Thread shutdown 
    } 
}); 

Надеется, что это помогает

+0

Я не могу найти WindowManager.LayoutParams.TYPE_KEYGUARD, и я думаю, что невозможно получить Домашний кнопка сигнал из-за безопасности. – Daniel

+0

Вы попробовали? Если вы не пробовали, не говорите, что это невозможно. дайте мне знать, если вы протестируете его, и он не работает – Zoe

Смежные вопросы