Приложение Android не отвечает на кнопку «Назад»

#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. Мой класс расширяет фрагмент.