queue device state changes and handle them serially in a background thread