#android #multithreading #scheduled-tasks
#Android #многопоточность #запланированные задачи
Вопрос:
У меня есть ScheduledExecutorService, который запускает метод каждые 20 мс.
beeperHandle = scheduler.scheduleAtFixedRate(beeper, 0, 20, TimeUnit.MILLISECONDS);
Кроме того, BluetoothService получает непрерывные данные. Я хочу остановить весь сбор данных и запланированные методы при нажатии кнопки «Назад». Но даже когда я нажимаю кнопку, приложение фактически не завершает работу, а продолжает работать на переднем плане — в основном пользовательский интерфейс приложения перестает отвечать. Поскольку я использую ScheduledExecutorService, который создает новый поток, этого не должно происходить. И через некоторое время после повторного нажатия кнопки «Назад» или кнопки «Домой», когда приложение, наконец, исчезает с экрана, сбор данных и запланированные методы не прекращаются даже тогда. Я пытался отменить и остановить их в своих методах onDestroyView (), onDestroy () и даже в onPause ().
public void onDestroy()
{
if (beeperHandle != null)
beeperHandle.cancel(true);
if(scheduler.isShutdown())
scheduler.shutdownNow();
mBluetoothLeService = null;
mBLEConnectionHandler = null;
mBLEReceiverHandler = null;
}
Как мне убедиться, что пользовательский интерфейс не зависает, а приложение не останавливает все, что нажимается на кнопку «Назад»?
Ответ №1:
Попробуйте добавить следующее в свою активность:
@Override
public void onBackPressed() {
finish();
}
Комментарии:
1. В нем говорится, что метод onBackPressed() BFragment должен переопределять или реализовывать метод supertype. Мой класс расширяет фрагмент.