Launcher
There is a situation when it is necessary to synchronize the work of the cleaners. For this purpose, a separate functionality was created that allows you to do this without any difficulty.
important
This functionality synchronizes the work of existing cleaners. Nothing prevents you from subscribing to a specific cleaner and tracking its work in the launcher.
#
AnalysisThe following code example demonstrates how to use the analysis operation:
// Get the launcher through the cleaner managerval launcher = CleanerManagerFactory.cleanerManager.launcher
// List of cleaners for the launcherval cleanerList: List<Cleaner>
// Get coroutine scope to call cleaner library functionsval cleanerScope = CleanerManagerFactory.cleanerManager.scope
// Run all operations related to libraries only in the cleaner librarycleanerScope.launch {
// Start the analysis process with the following call launcher.analyze( cleaners = cleanerList, isFullRefresh = true )}
A cleaner is represented by an object that implements the CleanerLauncher
interface, a analyze
method that takes the following two parameters:
cleaners: List<Cleaner>
- list of cleanersisFullRefresh: Boolean
-true
- when analyzing, the cleaner scans the system again;false
- the method returns the cached results of the parsing (only non-deleted items).
#
CleaningUse the following code example to clear items.
// Get the launcher through the cleaner managerval launcher = CleanerManagerFactory.cleanerManager.launcher
// Get coroutine scope to call cleaner library functionsval cleanerScope = CleanerManagerFactory.cleanerManager.scope
// Get a list of items to removeval trashItemList: List<TrashItem>
// Run all operations related to libraries only in the cleaner librarycleanerScope.launch { // Start the analysis process with the following call launcher.clean( items = trashItemList )}
A cleaner is represented by an object that implements the Cleaner
interface, whose clean
method accepts content: List<TrashItem>
(list of items to remove)
#
Getting resultsIn order to get the state of the cleaner and the results of its work, you need to subscribe to its state as follows:
// Get the launcher through the cleaner managerval launcher = CleanerManagerFactory.cleanerManager.launcher
// Get coroutine scope to call cleaner library functionsval cleanerScope = CleanerManagerFactory.cleanerManager.scope
// Run all operations related to libraries only in the cleaner librarycleanerScope.launch { // Subscribe to the states of the launcher launcher.stateFlow.collect { cleanerState -> // cleanerState: CleanerState // Do something... }}
Launcher cleaner inherits Cleaner
interface that provides stateFlow: StateFlow
(StateFlow) which emits CleanerState
objects containing information about the condition of the cleaner. Here are the following possible states of the cleaner:
Inactive - this is the initial state of the cleaner before starting work.
Analyzing - this state indicates that the cleaner is in the process of analyzing data. It includes the following fields:
itemCount: Int
- number of items foundsize: Long
- size of found elements in bits
Analysed - this state indicates that the cleaner has finished analyzing the data. It includes the following fields:
items: List<TrashItem>
- list of found itemserror: Trowable?
- an error occurred during the analysis process
Cleaning -this state indicates that the cleaner is in the process of deleting data. It includes the following fields:
itemCount: Int
- number of items foundsize: Long
- size of found elements in bits
Cleaned - this state indicates that the cleaner has completed the data cleaning process. It includes the following fields:
items: List<TrashItem>
- list of deleted itemserror: Trowable?
- an error occurred during the cleaning process
Links - CleanerState, TrashItem, CleanerLauncher.