You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关闭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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:47:41