团结1.4.4+鸿蒙5.0 平台兼容性问题
2025/06
04
11:06
现象描述:
进入游戏后,断开网络连接,游戏闪退
NETMANAGER_BASE: [network_module.cpp 59] Subscribe is called
NETMANAGER_BASE: [network_exec.cpp 116] ExecSubscribe
Tuanjie: Could not allocate memory: System out of memory!
Tuanjie: Trying to allocate: 398659429081B with 16 alignment. MemoryLabel: String
Tuanjie: Allocation happened at: Line:525 in
Tuanjie: Memory overview
Tuanjie: [ ALLOC_TEMP_TLS ] used: 4507B | peak: 0B | reserved: 6455296B
Tuanjie: [ ALLOC_DEFAULT ] used: 76851824B | peak: 0B | reserved: 184561664B
Tuanjie: [ ALLOC_TEMP_JOB_1_FRAME ] used: 0B | peak: 0B | reserved: 0B
Tuanjie: [ ALLOC_TEMP_JOB_2_FRAMES ] used: 0B | peak: 0B | reserved: 0B
Tuanjie: [ ALLOC_TEMP_JOB_4_FRAMES (JobTemp) ] used: 71B | peak: 0B | reserved: 20971520B
Tuanjie: [ ALLOC_TEMP_JOB_ASYNC (Background) ] used: 442B | peak: 0B | reserved: 12582912B
Tuanjie: [ ALLOC_GFX ] used: 1903336B | peak: 0B | reserved: 33554432B
Tuanjie: [ ALLOC_CACHEOBJECTS ] used: 74064092B | peak: 0B | reserved: 85213184B
Tuanjie: [ ALLOC_TYPETREE ] used: 17014696B | peak: 0B | reserved: 20971520B
MUSL-SIGCHAIN: signal_chain_handler call 2 rd sigchain action for signal: 5 sca_sigaction=5a32bbb810 noreturn=0 FREEZE_signo_5 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=642 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=642 thread_list_lock_after_lock=32291 thread_list_lock_pre_unlock=32291 thread_list_lock_pthread_exit=32295 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0
追查发现出在网络接收数据这块有问题
private void AsyncReadCallback(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
TcpClient tc = state.client;
if (!tc.Connected)
{
return;
}
NetworkStream ns = tc.GetStream();
int num = ns.EndRead(ar);
if (num > 0)
{
// ... process data
ns.BeginRead(buffer, 0, buffer.length, new AsyncCallback(AsyncReadCallback), state);
}
}
在Unity2021.3.X的Android平台上,若Wifi断开连接,则 num 返回 <=0,连接中止
但在Tuanjie1.4.4的鸿蒙平台上,若Wifi断开则会产生异常,如果不处理异常,中发生内存溢出
private void AsyncReadCallback(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
TcpClient tc = state.client;
if (!tc.Connected)
{
return;
}
NetworkStream ns = tc.GetStream();
int num = 0;
try
{
num = ns.EndRead(ar);
}
catch
{
}
if (num > 0)
{
// ... process data
ns.BeginRead(buffer, 0, buffer.length, new AsyncCallback(AsyncReadCallback), state);
}
}
CopyRights: The Post by BY-NC-SA For Authorization,Original If Not Noted,Reprint Please Indicate From 老刘@开发笔记
Post Link: 团结1.4.4+鸿蒙5.0 平台兼容性问题
Post Link: 团结1.4.4+鸿蒙5.0 平台兼容性问题