A background task handler implements a specific type of background task, e.g. creating a zip archive. It abstracts the basic steps to process. While it can be a non-abstract implementation it might be beneficial to distinguish between type of background task and specific task, e.g. downloading a folder. The folder download task is responsible for the GUI integration and gathering of files, while the parent zip handler is all about process and progress handling.
The handler inits a task and updates the progress information. This is done by simply calculating the overall steps needed on initialisation and writing the current step to the database whenever possible while processing. The service will update the GUI progress bar accordingly.