Как отменить тему - PullRequest
       40

Как отменить тему

1 голос
/ 19 марта 2011

Я пытаюсь создать медиаплеер с seekbar.Так как seekbar должен останавливать прогресс, когда нажата пауза или нажата остановка.Я хочу остановить поток соответственно.Более того, когда нажата кнопка «Назад», я хочу снова отменить тему.

Ответы [ 2 ]

3 голосов
/ 19 марта 2011

Использование Thread.currentThread (). Interrupt ()

Прерывание потока

С каждым потоком связано логическое свойство, представляющееего прерванный статус.Прерванный статус изначально ложен;когда поток прерывается другим потоком через вызов Thread.interrupt (), происходит одно из двух.Если этот поток выполняет низкоуровневый метод прерываемой блокировки, такой как Thread.sleep (), Thread.join () или Object.wait (), он разблокирует и выдает исключение InterruptedException.В противном случае interrupt () просто устанавливает состояние прерывания потока.Код, выполняющийся в прерванном потоке, может позже опрашивать прерванный статус, чтобы узнать, было ли ему запрошено остановить то, что он делает;статус прерывания может быть прочитан с помощью Thread.isInterrupted (), а также может быть прочитан и очищен за одну операцию с плохо названным Thread.interrupted ().

Прерывание - это кооперативный механизм.Когда один поток прерывает другой, прерванный поток не обязательно останавливает то, что он делает немедленно.Вместо этого прерывание - это способ вежливо попросить другой поток прекратить то, что он делает, если захочет, в удобное для него время.Некоторые методы, такие как Thread.sleep (), серьезно относятся к этому запросу, но методы не обязаны обращать внимание на прерывание.Методы, которые не блокируют, но выполнение которых все еще может занять много времени, могут учитывать запросы на прерывание путем опроса статуса прерывания и возврата в случае прерывания досрочно.Вы можете игнорировать запрос на прерывание, но это может поставить под угрозу скорость реагирования.

Одним из преимуществ кооперативного характера прерывания является то, что он обеспечивает большую гибкость для безопасного создания отменяемых действий.Мы редко хотим, чтобы деятельность немедленно прекратилась;структуры данных программы могут остаться в несогласованном состоянии, если действие было отменено в середине обновления.Прерывание позволяет отменяемой операции очистить любую незавершенную работу, восстановить инварианты, уведомить другие действия об отмене и затем прекратить.

0 голосов
/ 26 июня 2012
boolean running = true;
final Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            while(running){
                 //Your code
            }
        } catch (Exception e) {
        // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //handler code

    }
});
t.start();

определение «работающего» логического значения будет выполняться, когда поток выполнит свой код, а если вы установите значение «false», панель поиска остановится, не прерывая или не убивая поток.

...