Poll threads (position at 2 Hz, signal when monitoring) run while-loops with time.sleep() that never exit on app quit. Add on_unmount() to PositionScreen, SignalScreen, and BirdcageApp to clear polling flags and disconnect the device, so worker threads exit within the sleep interval instead of hitting the 300s timeout.