杀死进程方法2

This commit is contained in:
roxy 2026-05-09 19:38:33 +08:00
parent 915fa61f0a
commit 85e6d88472
3 changed files with 13 additions and 58 deletions

View File

@ -89,12 +89,8 @@ class _SCIndexPageState extends State<SCIndexPage>
WakelockPlus.enable();
_showEntryDialogs();
});
String roomId = DataPersistence.getLastTimeRoomId();
if (roomId.isNotEmpty) {
Provider.of<RtcProvider>(
context,
listen: false,
).cleanupStaleRoomForColdStart(roomId);
if (DataPersistence.getLastTimeRoomId().isNotEmpty) {
unawaited(DataPersistence.setLastTimeRoomId(""));
}
}

View File

@ -334,7 +334,6 @@ class RealTimeCommunicationManager extends ChangeNotifier {
Future<RtcEngine>? _rtcEngineInitTask;
Future<void>? _rtcEnginePrewarmTask;
Future<void>? _pendingRoomSwitchAgoraLeaveTask;
final Map<String, Future<void>> _coldStartRoomCleanupTasks = {};
String? _joiningChannelId;
bool _isRefreshingMicList = false;
bool _isRefreshingOnlineUsers = false;
@ -434,51 +433,6 @@ class RealTimeCommunicationManager extends ChangeNotifier {
this.context = context;
}
void cleanupStaleRoomForColdStart(String roomId) {
final normalizedRoomId = roomId.trim();
if (normalizedRoomId.isEmpty ||
_coldStartRoomCleanupTasks.containsKey(normalizedRoomId)) {
return;
}
late final Future<void> cleanupTask;
cleanupTask = _retryExitNetworkRequest(
'cold start quit room $normalizedRoomId',
() async {
if (_isCurrentRoomId(normalizedRoomId)) {
return;
}
final didQuit = await SCAccountRepository().quitRoom(normalizedRoomId);
if (!didQuit) {
throw StateError('quitRoom returned false');
}
},
).whenComplete(() {
if (identical(
_coldStartRoomCleanupTasks[normalizedRoomId],
cleanupTask,
)) {
_coldStartRoomCleanupTasks.remove(normalizedRoomId);
}
if (DataPersistence.getLastTimeRoomId() == normalizedRoomId) {
unawaited(DataPersistence.setLastTimeRoomId(""));
}
});
_coldStartRoomCleanupTasks[normalizedRoomId] = cleanupTask;
unawaited(cleanupTask);
}
Future<void> _waitForColdStartRoomCleanup(String roomId) async {
final normalizedRoomId = roomId.trim();
if (normalizedRoomId.isEmpty) {
return;
}
final cleanupTask = _coldStartRoomCleanupTasks[normalizedRoomId];
if (cleanupTask == null) {
return;
}
await cleanupTask;
}
bool get roomVisualEffectsEnabled => _roomVisualEffectsEnabled;
bool get isExitingCurrentVoiceRoomSession =>
@ -2153,10 +2107,6 @@ class RealTimeCommunicationManager extends ChangeNotifier {
SCTts.show('Microphone permission is denied.');
throw ArgumentError('Microphone permission is denied.');
}
await _waitForColdStartRoomCleanup(roomId);
if (!context.mounted) {
return;
}
if (roomId == currenRoom?.roomProfile?.roomProfile?.id) {
if (_currentRoomIsEntryPreview ||
_roomStartupStatus == RoomStartupStatus.loading) {
@ -2182,6 +2132,13 @@ class RealTimeCommunicationManager extends ChangeNotifier {
context,
listen: false,
).fetchUserProfileData();
final groupId = currenRoom?.roomProfile?.roomProfile?.roomAccount ?? "";
if (groupId.isNotEmpty) {
unawaited(
rtmProvider?.loadRoomHistoryMessages(groupId, count: 20) ??
Future<void>.value(),
);
}
retrieveMicrophoneList();
fetchOnlineUsersList();
_startRoomStatePolling();
@ -2722,7 +2679,8 @@ class RealTimeCommunicationManager extends ChangeNotifier {
if (!_isActiveRoomStartup(entryRequestSerial, roomId)) {
return;
}
if (joinResult == null || joinResult.code != 0) {
if (joinResult == null ||
(joinResult.code != 0 && joinResult.code != 10013)) {
_stopVoiceRoomForegroundService();
_setRoomStartupFailed(RoomStartupFailureType.im);
return;
@ -2778,6 +2736,7 @@ class RealTimeCommunicationManager extends ChangeNotifier {
return;
}
_setRoomStartupReady();
_refreshRoomRedPacketListAfterEntry(roomId: roomId);
Msg joinMsg = Msg(
groupId: currenRoom?.roomProfile?.roomProfile?.roomAccount ?? "",

View File

@ -649,7 +649,7 @@ class RealTimeMessagingManager extends ChangeNotifier {
groupID: groupID,
message: message,
);
if (joinResult.code == 0) {
if (joinResult.code == 0 || joinResult.code == 10013) {
onNewMessageListenerGroupMap[groupID] = _newGroupMsg;
}
return joinResult;