杀死进程方法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(); WakelockPlus.enable();
_showEntryDialogs(); _showEntryDialogs();
}); });
String roomId = DataPersistence.getLastTimeRoomId(); if (DataPersistence.getLastTimeRoomId().isNotEmpty) {
if (roomId.isNotEmpty) { unawaited(DataPersistence.setLastTimeRoomId(""));
Provider.of<RtcProvider>(
context,
listen: false,
).cleanupStaleRoomForColdStart(roomId);
} }
} }

View File

@ -334,7 +334,6 @@ class RealTimeCommunicationManager extends ChangeNotifier {
Future<RtcEngine>? _rtcEngineInitTask; Future<RtcEngine>? _rtcEngineInitTask;
Future<void>? _rtcEnginePrewarmTask; Future<void>? _rtcEnginePrewarmTask;
Future<void>? _pendingRoomSwitchAgoraLeaveTask; Future<void>? _pendingRoomSwitchAgoraLeaveTask;
final Map<String, Future<void>> _coldStartRoomCleanupTasks = {};
String? _joiningChannelId; String? _joiningChannelId;
bool _isRefreshingMicList = false; bool _isRefreshingMicList = false;
bool _isRefreshingOnlineUsers = false; bool _isRefreshingOnlineUsers = false;
@ -434,51 +433,6 @@ class RealTimeCommunicationManager extends ChangeNotifier {
this.context = context; 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 roomVisualEffectsEnabled => _roomVisualEffectsEnabled;
bool get isExitingCurrentVoiceRoomSession => bool get isExitingCurrentVoiceRoomSession =>
@ -2153,10 +2107,6 @@ class RealTimeCommunicationManager extends ChangeNotifier {
SCTts.show('Microphone permission is denied.'); SCTts.show('Microphone permission is denied.');
throw ArgumentError('Microphone permission is denied.'); throw ArgumentError('Microphone permission is denied.');
} }
await _waitForColdStartRoomCleanup(roomId);
if (!context.mounted) {
return;
}
if (roomId == currenRoom?.roomProfile?.roomProfile?.id) { if (roomId == currenRoom?.roomProfile?.roomProfile?.id) {
if (_currentRoomIsEntryPreview || if (_currentRoomIsEntryPreview ||
_roomStartupStatus == RoomStartupStatus.loading) { _roomStartupStatus == RoomStartupStatus.loading) {
@ -2182,6 +2132,13 @@ class RealTimeCommunicationManager extends ChangeNotifier {
context, context,
listen: false, listen: false,
).fetchUserProfileData(); ).fetchUserProfileData();
final groupId = currenRoom?.roomProfile?.roomProfile?.roomAccount ?? "";
if (groupId.isNotEmpty) {
unawaited(
rtmProvider?.loadRoomHistoryMessages(groupId, count: 20) ??
Future<void>.value(),
);
}
retrieveMicrophoneList(); retrieveMicrophoneList();
fetchOnlineUsersList(); fetchOnlineUsersList();
_startRoomStatePolling(); _startRoomStatePolling();
@ -2722,7 +2679,8 @@ class RealTimeCommunicationManager extends ChangeNotifier {
if (!_isActiveRoomStartup(entryRequestSerial, roomId)) { if (!_isActiveRoomStartup(entryRequestSerial, roomId)) {
return; return;
} }
if (joinResult == null || joinResult.code != 0) { if (joinResult == null ||
(joinResult.code != 0 && joinResult.code != 10013)) {
_stopVoiceRoomForegroundService(); _stopVoiceRoomForegroundService();
_setRoomStartupFailed(RoomStartupFailureType.im); _setRoomStartupFailed(RoomStartupFailureType.im);
return; return;
@ -2778,6 +2736,7 @@ class RealTimeCommunicationManager extends ChangeNotifier {
return; return;
} }
_setRoomStartupReady(); _setRoomStartupReady();
_refreshRoomRedPacketListAfterEntry(roomId: roomId);
Msg joinMsg = Msg( Msg joinMsg = Msg(
groupId: currenRoom?.roomProfile?.roomProfile?.roomAccount ?? "", groupId: currenRoom?.roomProfile?.roomProfile?.roomAccount ?? "",

View File

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