def METHOD_NAME(self):
    while not self.xbmc_monitor.abortRequested() and not self.exit:
        if get_property('ServiceStop'):
            self.cron_job.exit = True
            self.exit = True
        # If we're in fullscreen video then we should update the playermonitor time
        elif get_condvisibility("Window.IsVisible(fullscreenvideo)"):
            self._on_fullscreen()
        # Sit idle in a holding pattern if the skin doesn't need the service monitor yet
        elif get_condvisibility(
                "!Skin.HasSetting(TMDbHelper.Service) + "
                "!Skin.HasSetting(TMDbHelper.EnableBlur) + "
                "!Skin.HasSetting(TMDbHelper.EnableDesaturate) + "
                "!Skin.HasSetting(TMDbHelper.EnableColors)"):
            self._on_idle(30)
        # Sit idle in a holding pattern if screen saver is active
        elif get_condvisibility("System.ScreenSaverActive"):
            self._on_idle(4)
        # skip when modal or busy dialogs are opened (e.g. select / progress / busy etc.)
        elif get_condvisibility(
                "Window.IsActive(DialogSelect.xml) | "
                "Window.IsActive(progressdialog) | "
                "Window.IsActive(busydialog) | "
                "Window.IsActive(shutdownmenu) | "
                "!String.IsEmpty(Window.Property(TMDbHelper.ServicePause))"):
            self._on_modal()
        # manage context menu separately from other modals to pass info through
        elif get_condvisibility(
                "Window.IsActive(contextmenu) | "
                "!String.IsEmpty(Window.Property(TMDbHelper.ContextMenu))"):
            self._on_context()
        # skip when container scrolling
        elif get_condvisibility("Container.Scrolling"):
            self._on_scroll()
        # media window is opened or widgetcontainer set - start listitem monitoring!
        elif get_condvisibility(
                "Window.IsMedia | "
                "!String.IsEmpty(Window(Home).Property(TMDbHelper.WidgetContainer)) | "
                "!String.IsEmpty(Window.Property(TMDbHelper.WidgetContainer)) | "
                "Window.IsVisible(movieinformation) | "
                "Window.IsVisible(musicinformation) | "
                "Window.IsVisible(songinformation) | "
                "Window.IsVisible(addoninformation) | "
                "Window.IsVisible(pvrguideinfo) | "
                "Window.IsVisible(tvchannels) | "
                "Window.IsVisible(tvguide)"):
            self._on_listitem()
        # Otherwise just sit here and wait
        else:
            self._on_clear()
    # Some clean-up once service exits
    self._on_exit()