На Android застосовуються ті ж правила, що і в звичайному середовищі Java. У Java потоки не вбиваються, але зупинка потоку виконується в спільно . Потік просять завершити, і його можна вимкнути.
Часто використовується volatile boolean
поле, яке потік періодично перевіряє і завершує, коли йому встановлено відповідне значення.
Я не використовував би, boolean
щоб перевірити, чи повинен потік закінчуватися . Якщо ви використовуєте volatile
як модифікатор поля, це буде працювати надійно, але якщо ваш код стає більш складним, оскільки замість цього використовуються інші методи блокування всередині while
циклу, може статися, що ваш код взагалі не закінчується або, принаймні, триває довше, ніж ви можливо, захоче.
Деякі методи блокування бібліотеки підтримують переривання.
Кожен потік вже має логічний статус перерваного стану, і ви повинні ним скористатися. Це можна реалізувати так:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Вихідний код взято з Java Concurrency на практиці . Оскільки cancel()
метод є загальнодоступним, ви можете дозволити іншому потоку викликати цей метод як завгодно.
Існує також погано названий статичний метод interrupted
який очищає перерваний стан поточного потоку.