resume method
Restore and resume all study deployments which were running on this client manager when the app was killed / stopped (e.g., by the OS).
This method is useful on app restart, since it will restore and
resume all sampling on this client.
Data sampling will be resumed for studies which were running
(i.e., having StudyStatus.Running
) when the app was closed.
Returns the number of restored studies, if any (may be zero).
To access a list of resumed studies, check the list of studies
after this resume method has ended.
Implementation
Future<int> resume() async {
info('$runtimeType - restoring all study deployments');
var persistentStudies = await Persistence().getAllStudyDeployments();
debug('$runtimeType - studies: $persistentStudies');
for (var study in persistentStudies) {
debug('$runtimeType - study status: ${study.status}');
// only add deployed, running or stopped studies
if (study.status == StudyStatus.Deployed ||
study.status == StudyStatus.Running ||
study.status == StudyStatus.Stopped) {
// add the restored study
await addStudy(study);
// deploy the study using the cached deployment
final controller = getStudyRuntime(study.studyDeploymentId);
await controller?.tryDeployment(useCached: true);
await controller?.configure();
// if this study was running when the app was closed, restart sampling
if (study.status == StudyStatus.Running) controller?.start();
}
}
_state = ClientManagerState.started;
return studyCount;
}