关闭Activity时触发destroySurface Logcat错误的排查求助
解决Splash_GameActivity关闭时的destroySurfaces错误日志问题
关闭Splash_GameActivity时,Logcat会输出destroySurfaces错误日志,目前不影响功能,但日志提示干扰开发。开发环境:Android Studio Dolphin,SDK版本30。
错误日志
Input channel constructed: fd=81 11:13:26.188 D Input channel destroyed: fd=84 11:13:26.188 D MSG_WINDOW_FOCUS_CHANGED 0 1 11:13:26.188 D prepareNavigationBarInfo() DecorView@b80b1eb[Splash_GameActivity] 11:13:26.189 D getNavigationBarColor() -855310 11:13:26.211 D eglDestroySurface = 0x8ea05360, 0x8eb5e800 11:13:26.236 D Relayout returned: old=[462,305][817,527] new=[462,305][817,527] result=0x5 surface={false 0} changed=true 11:13:26.245 D stopped(true) old=false 11:13:26.254 D dispatchDetachedFromWindow 11:13:26.270 D Input channel destroyed: fd=82 11:13:26.460 E win=Window{d4f7368 u0 com.scorer.tennis_android_nov22_nov22/com.scorer.tennis_android_nov22.Splash_GameActivity EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibility=8 caller=com.android.server.wm.AppWindowToken.destroySurfaces:896 com.android.server.wm.AppWindowToken.destroySurfaces:877 com.android.server.wm.WindowState.onExitAnimationDone:5533 com.android.server.wm.WindowStateAnimator.onAnimationFinished:320 com.android.server.wm.WindowState.onAnimationFinished:5957 com.android.server.wm.-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM.run:2 com.android.server.wm.SurfaceAnimator.lambda$getFinishedCallback$0:100
对应Activity代码
package com.scorer.tennis_android_nov22; import android.app.Activity; import android.os.Bundle; import android.os.Handler; public class Splash_GameActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash_game); new Handler().postDelayed(new Runnable() { @Override public void run() { finish(); } }, 1000); // wait for 1 second } }
解决办法
- 规范Handler生命周期管理:将Handler改为成员变量,在
onDestroy中调用removeCallbacksAndMessages(null)移除所有未执行的回调,避免Activity销毁后仍有任务触发导致窗口状态不一致。修改后的代码:private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash_game); mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { finish(); } }, 1000); } @Override protected void onDestroy() { super.onDestroy(); if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); } } - 禁用退出动画:在
finish()前添加overridePendingTransition(0, 0),减少Surface销毁时的动画冲突:@Override public void run() { overridePendingTransition(0, 0); finish(); } - 升级SDK版本:将compileSdkVersion和targetSdkVersion升级到31及以上,该错误可能是Android 11(SDK30)的系统小bug,后续版本已修复。
- 检查Surface相关控件:如果布局中包含SurfaceView或TextureView,确保在Activity销毁前调用对应方法释放资源,避免Surface残留导致销毁异常。
内容的提问来源于stack exchange,提问作者GeoffC
相关产品推荐
相关产品推荐

