我有一个应用程序使用 API 调用将操纵杆位置数据上传到网络服务器。
当操纵杆移动时会调用此方法。如果操纵杆不在中心,它将停止任何先前运行的隔离并启动新的隔离。
void onJoystickMoved(double angle, double distance) {
stopIsolate();
if(distance > 0.06){
startIsolate(JoystickPosition.fromDistanceAndRadius(distance, angle));
}
}
隔离启动和停止方法
Future<void> startIsolate(JoystickPosition position) async {
isolate = await Isolate.spawn(uploadJoystickPosition, position);
}
void stopIsolate() {
if (isolate != null) {
debugPrint("Stopping isolate");
isolate.kill();
isolate = null;
}
}
uploadJoystickPosition方法(isolate中的方法):
void uploadJoystickPosition(JoystickPosition position){
Timer.periodic(new Duration(seconds: 1), (Timer t) {
DataModel dataModel = DataModel(1, getTimeInSeconds());
dataModel.joystickPosition = position;
debugPrint("Distance: ${position.distance}");
uploadData(dataModel).then(uploadResponse, onError: uploadError);
});
}
问题是 uploadJoystickPosition 不断上传操纵杆的旧位置和新位置。我假设这是因为即使隔离被杀死,计时器也会继续运行。
问题:
- 为什么我的计时器在我杀死隔离体后仍继续运行(并上传)?
- 当我杀死运行中的隔离体时,如何让计时器停止?