На 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 який очищає перерваний стан поточного потоку.